c++ - 在 C++ 中对数组进行洗牌和平方的函数的问题
问题描述
我正在尝试编写一个函数,该函数将随机化数组中元素的顺序并对这些元素进行平方。我设法用两个参数编写它,但是我想只使用一个参数来编写它,但由于某种原因,我总是得到奇怪的值作为解决方案。有时它们是正确的,有时它们不是。这是我的功能的代码:
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')
你一直读到一个空字符终止。显然,您永远不知道何时达到该目标,并且它不会是您阵列的尽头。因此,您越过指针的边界并进入未定义的行为领域。
另一方面,您无法找到数组的大小,因为当传递给函数时,数组会衰减为指针,而您无法找到它的大小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)
推荐阅读
- unix - UNIX:文件列表为空,拥有所有者的权限,按字母顺序,将结果添加到文件中
- javascript - 如何通过单击模态窗口外部正确关闭模态窗口?window.onclick 是如何工作的?
- vb.net - DataGridView 不显示
- python - QuantLib:如何计算债券的修正久期?
- arrays - 在 Julia 中将整数数组转换为字符串数组
- json - 如何将 JSON 文件保存到 csv 中
- angular - 重新加载+导航到另一个页面后组件未销毁
- c++ - 使用按键事件的 SFML 精灵移动系统不起作用
- android - Android 10 L2CAP 连接 IOException 超时 Wii 平衡板
- javascript - 将 div 放置在页面上的任何位置,但仍有文字环绕它