我正在尝试编写一个函数,该函数将随机化数组中元素的顺序,并对这些元素求平方。我设法用两个参数写它,但是我只想用一个参数写它,但是由于某种原因,我总是得到奇怪的值作为解决方案。有时它们是正确的,而其他时候则不是。这是我的功能的代码:

int *randomizedField(int field[]){
    int temp = 0;
    int random = 0;
    int i = 0;
    int j = 0;
    while(field[i] != '\0'){
        field[i] = field[i] * field[i];
        i++;
    }
    while(field[j] != '\0'){
        random = rand() % i;
        temp = field[j];
        field[j] = field[random];
        field[random] = temp;
        j++;
    }
    return field;
}

最佳答案

您的循环中存在未定义的行为:

while(field[i] != '\0')


您阅读直到达到一个终止的空字符为止。显然,您永远不知道何时达到目标,而且它不会在阵列的尽头。因此,您通过了指针的边界并输入undefined bahavior区域。

一方面,您无法找到数组的大小,因为当传递给函数时,数组会衰减为指针,并且您无法使用sizeof(field)/sizeof(int)来找到其大小。

要解决您的问题,请将数组的长度传递给函数,或者最好使用STL容器之一,例如std::vectorstd::array

第一个循环将是:

for(int i = 0; i < field.size(); ++i) {
   field[i] = field[i] * field[i];
   i++;
}


函数签名可以是:

void randomizedField(std::vector<int>& field)

关于c++ - 在C++中将数组随机排列和平方的函数的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58547845/

10-17 02:02