C 无法获取整数数组的长度

C 无法获取整数数组的长度,c,pointers,C,Pointers,可能重复: 我试图得到整数数组的长度,但没有得到正确的答案 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而不

可能重复:

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

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

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

所以

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

所以


因为数组不是指针,指针也不是数组
sizeof(指针)
sizeof(指针指向的数组)
不同,因为数组不是指针,指针也不是数组
sizeof(指针)
sizeof(指针指向的数组)

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

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

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

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

这个问题或类似的问题已经被问了几百次了。我想知道人们认为C数组的大小存储在内存中的什么地方。@JimBalter,因为在许多其他语言中它是:):):)@dasblinkenlight请再次阅读我的评论。。。我写的是“哪里”,不是“为什么”。如果人们不理解C存储模型,他们就没有编写C代码的业务;他们肯定会失败。这个问题或类似的问题已经被问了几百次了。我想知道人们认为C数组的大小存储在内存中的什么地方。@JimBalter,因为在许多其他语言中它是:):):)@dasblinkenlight请再次阅读我的评论。。。我写的是“哪里”,不是“为什么”。如果人们不理解C存储模型,他们就没有编写C代码的业务;他们肯定会失败。