为何这段C代码无法统计数组元素个数?如何实现输出结果3?
问题分析与修复方案
你的代码无法正确统计数组长度的核心原因是:把int数组当作字符串处理了。字符串依赖'\0'(ASCII值为0的字符)作为终止标记,但你定义的int数组{1,5,3}末尾并没有这个终止值,循环会越界访问数组外的内存,导致结果不可控。
下面提供两种可行的修复方式:
方法一:传递数组长度(推荐)
C语言中数组作为函数参数时会退化为指针,无法直接通过指针获取原数组的长度。因此最安全的方式是在调用函数时主动传递数组长度。
修改后的代码:
#include <stdio.h> int counter(int arr[], int length) { int c = 0; for (int i = 0; i < length; i++) { c++; } return c; } int main() { int a[] = { 1, 5, 3 }; // 通过sizeof计算数组长度:总字节数 ÷ 单个元素字节数 int arr_length = sizeof(a) / sizeof(a[0]); int d = counter(a, arr_length); printf("%d ", d); return 0; }
方法二:手动添加终止值(不推荐)
如果一定要用终止标记的方式,可以在int数组末尾添加一个不会出现在正常元素中的值(比如0),但这种方法有局限性——如果数组本身包含0元素,统计结果会出错。
修改后的代码示例:
#include <stdio.h> int counter(int arr[]) { int c =0; // 用0作为终止标记,注意数组末尾必须添加0 for (int i = 0; arr[i] != 0; i++) { c = c + 1; } return c; } int main() { // 数组末尾添加0作为终止符 int a[] = { 1, 5, 3, 0 }; int d = counter(a); printf("%d ", d); return 0; }
优先推荐方法一,它不受数组元素值的限制,是C语言中统计数组长度的标准做法。
内容的提问来源于stack exchange,提问作者Harry Raj
相关产品推荐
相关产品推荐

