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代码的业务;他们肯定会失败。