如何获取int*类型指针指向数组的长度?
如何计算int*类型指针指向的数组长度
你当前代码得到输出2的原因是:当数组作为函数参数传递时,会退化为指针——哪怕你写的是int nums[],编译器也会把它当作int* nums处理。此时sizeof(nums)获取的是指针本身的大小(在64位系统中通常是8字节),而不是数组的总字节数。用指针大小除以sizeof(nums[0])(也就是int的大小,通常4字节),得到的就是8/4=2,这就是你看到的结果。
C语言中,指针本身不携带它指向的数组的长度信息,所以无法仅通过int*指针直接计算数组长度。你可以通过以下两种方式解决:
1. 额外传递数组长度参数
这是最常用、最可靠的方式,在调用函数时主动传入数组的长度:
int Summation(int* nums, int size) { // 这里可以基于size做逻辑处理,比如求和 return size; } // 调用示例:如果first是数组类型(如int first[] = {7,8,9};),先在调用端计算长度 int first[] = {7,8,9}; int firstSum = Summation(first, sizeof(first)/sizeof(first[0]));
2. 使用哨兵值标记数组末尾
在数组的最后放置一个特殊的“哨兵”值(比如-1,前提是数组元素不会用到这个值),遍历数组时遇到哨兵就停止,以此统计长度:
int Summation(int* nums) { int size = 0; // 假设用-1作为数组结束的标记 while (nums[size] != -1) { size++; } return size; } // 定义数组时必须添加哨兵 int first[] = {7,8,9,-1}; int firstSum = Summation(first);
注意:如果first是动态分配的数组(比如通过malloc申请的),你只能自己在分配时记录长度,再传递给函数,因为malloc返回的指针同样没有长度信息。
内容的提问来源于stack exchange,提问作者Vina
相关产品推荐
相关产品推荐

