1

可能重复:
函数参数中的数组长度

我正在尝试获取整数数组的长度,但我没有得到正确的答案

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 呢?

4

3 回答 3

3

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

于 2013-01-15T16:16:56.833 回答
2

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

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

这是 ideone 上的演示链接。

于 2013-01-15T16:16:57.287 回答
1

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

所以

sizeof(inp)/sizeof(int)
 ^__ 4        ^__ 4      = 1
于 2013-01-15T16:16:48.603 回答