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