C语言传递int数组作为参数求和输出随机值问题如何解决
问题根源
- C语言中数组作为函数参数传递时,会自动退化为指向数组首元素的指针,函数内部无法直接获取传入数组的实际长度。
- 你定义的
numList数组实际只有8个元素,但求和函数中循环条件写死了i < 10,会访问数组边界外的非法内存,属于未定义行为,因此每次运行都会读取到不确定的垃圾值,导致总和输出异常。
修复方案
推荐最常用的「数组长度作为额外参数传入」的方案,修复后代码如下:
#include <stdio.h> // 新增第二个参数接收数组长度 int sumofArrayNum(int numList[], int len); int main(){ int result,numList[]={23,32,54,23,54,32,3,35}; // 在数组未退化为指针的作用域内计算元素个数 int len = sizeof(numList)/sizeof(numList[0]); result = sumofArrayNum(numList, len); printf("sum= %d", result); return 0; } int sumofArrayNum(int numList[], int len){ int sum = 0; // 循环条件使用传入的实际长度 for(int i = 0; i < len; ++i){ sum += numList[i]; } return sum; }
修改后编译运行即可得到正确结果sum= 256。
内容的提问来源于stack exchange,提问作者Ismail Mansuri
相关产品推荐
相关产品推荐

