所以我只是在玩代码来查找数组长度.... 原始代码是:
#include<stdio.h>
int main()
{ int al;
int a[] = {1,2,3,4,5};
al= sizeof(a) / sizeof(a[0]);
printf("%d",al);
return 0;
}
这给了我输出:
5
但是当我将表达式更改为:
al= sizeof(&a[0]) / sizeof(a[0]);
它给了我
的输出2
如果 a
与 &a[0]
相同......那么为什么会发生这种情况?
另外,如果用 &a
代替 &a[0]
,答案也是 2。
最佳答案
不,它们的类型不同。
对于 sizeof
的上下文运算符(operator),a
类型为 int [5]
, 但是 , &a[0]
类型为 int *
.它们确实大小不一。以此类推,&a
类型为 int (*)[5]
- 基本上,一个指针。
所以,对于表达式
al= sizeof(a) / sizeof(a[0]);
与
相同al= sizeof( int [5]) / sizeof(int);
这给你 5。另一方面,
al= sizeof(&a[0]) / sizeof(a[0]);
与
相同al= sizeof(int *) / sizeof(int);
现在,它出现在您的平台中,sizeof(int *)
是 8 和 sizeof(int)
是 4,所以您会看到结果 2。
请记住,在某些情况下,数组类型会退化为指向数组第一个元素的指针,但其中一个异常(exception)情况不会退化,即数组用作 sizeof
的操作数时。运营商。
关于c - 数组长度...使用 sizeof 运算符时的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53364448/