#include <stdio.h>
int a[3] = {1,2,3};
void cal(int* item){
printf("Length(inside) is %lu\n", sizeof(item)/sizeof(item[0]));
}
int main(){
printf("Length(outside) is %lu\n", sizeof(a)/sizeof(int));
cal(a);
}
上面的代码结果是
Length(outside) is 3
Length(inside) is 2
然而,这是错误的,因为它们都应该是3,我的代码出了什么问题?
答案 0 :(得分:0)
这是因为数组在传递给函数时会衰减为指针。
基本上你正在做的是
sizeof(int*)/sizeof(int);
你能想到的是
之间的区别int a[5];
sizeof(a)/sizeof(a[0]); //this works
和
int a[5];
int* p = a;
sizeof(p)/sizeof(p[0]);
答案 1 :(得分:0)
首先,您应该使用%zu
fomat说明符来打印结果。
其次,当作为参数传递给函数时,数组名称会衰减到指向第一个元素的指针,因此sizeof(item)
将无法按预期工作。
基本上你正在做的是sizeof (int *)/ sizeof (int)
并且在你的环境中,指针可能占用8个字节而int
占用4
,所以你得到这个结果