我试图获得整数数组的长度,但我得不到正确的答案
void main()
{
int x[]={33,55,77};
printf("%d",getLength(x));//outputs 1
printf("%d",sizeof(x)/sizeof(int));//outputs 3
}
int getLength(int *inp)
{
return sizeof(inp)/sizeof(int);
}
那么为什么getLength返回值1而不是3?
答案 0 :(得分:3)
因为数组不是指针,指针不是数组。 sizeof(pointer)
与sizeof(the array which the pointer points to)
不同。
答案 1 :(得分:2)
由于数组衰减指针,因此无法在函数中执行长度计算:函数获取指针,而不是数组。您需要按照函数在打印3
时的方式进行内联计算,或者使用宏来计算数组长度:
#define GET_LENGTH(inp) (sizeof(inp)/sizeof(*inp))
答案 2 :(得分:1)
此处的sizeof(inp)
返回指针的大小而不是数组的大小和指针的大小= 4
所以
sizeof(inp)/sizeof(int)
^__ 4 ^__ 4 = 1