C语言数组长度怎么算的

#include <stdio.h>

int test(int nums[])
{
int sizeb=sizeof(nums)/sizeof(int);
printf("=================================\n");
printf("%d\n",sizeb);
for(int i=0;i<sizeb;i++){
printf("%d\n",nums[i]);
}
return sizeb;
}

int main(){
int nums[] ={1,2,3,4};
int size=sizeof(nums)/sizeof(int);
printf("main %d\n",size);
test(nums);
}

运行结果:
main 4
=================================
2
1
2

请问为什么数组传进去了长度计算只有2

第1个回答  2015-07-23
这是因为数组做型参时,数组名称当作指针使用。
这里的int test(int nums[])等价于int test(int *nums)
所以sizeof(nums)其实就是计算sizeof(int *)。

而在main中int nums[] ={1,2,3,4};,sizeof(nums)计算的是静态数组占用的内存大小。追问

那么请问,在函数中怎么判断作为参数传递进来的数组的长度呢? 谢谢

追答

不能,数组长度需要作为函数形参传递。
int test(int nums[], int size)

本回答被提问者采纳
第2个回答  2015-07-23
因为,函数形参int nums[]和int *nums是等价的,即类型为int*(指针),数组名作为实参传入函数的是数组首元素的地址(即指针)

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网