所以我只是在玩代码来查找数组长度。 原始代码为:
HomeView
这给了我输出:
5
但是当我将表达式更改为:
#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;
}
它给了我
的输出2
如果al= sizeof(&a[0]) / sizeof(a[0]);
与a
相同...那么为什么会发生这种情况?
另外,如果将&a[0]
替换为&a
,答案也是2。
答案 0 :(得分:8)
不,它们的类型不同。
对于sizeof
运算符而言,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。
请记住,在某些情况下,数组类型会衰减为指向数组第一个元素的指针,但是其中一种例外情况是,当数组用作sizeof
运算符的操作数时,