#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 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*(指针),数组名作为实参传入函数的是数组首元素的地址(即指针)