无法获得整数数组的长度

时间:2013-01-15 16:15:40

标签: c pointers

  

可能重复:
  length of array in function argument

我试图获得整数数组的长度,但我得不到正确的答案

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?

3 个答案:

答案 0 :(得分:3)

因为数组不是指针,指针不是数组。 sizeof(pointer)sizeof(the array which the pointer points to)不同。

答案 1 :(得分:2)

由于数组衰减指针,因此无法在函数中执行长度计算:函数获取指针,而不是数组。您需要按照函数在打印3时的方式进行内联计算,或者使用宏来计算数组长度:

#define GET_LENGTH(inp) (sizeof(inp)/sizeof(*inp))

Here is a link to a demo on ideone.

答案 2 :(得分:1)

此处的sizeof(inp)返回指针的大小而不是数组的大小和指针的大小= 4

所以

sizeof(inp)/sizeof(int)
 ^__ 4        ^__ 4      = 1