数组长度...使用 sizeof 运算符时的不同输出
array length...different outputs when using sizeof operator
所以我只是在玩代码来查找数组长度....
原始代码是:
#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
运算符的上下文,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。
请记住,在某些情况下,数组类型会衰减为指向数组第一个元素的指针,但其中一个例外情况不会,即数组用作 [=14= 的操作数时] 运算符。
所以我只是在玩代码来查找数组长度.... 原始代码是:
#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
运算符的上下文,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。
请记住,在某些情况下,数组类型会衰减为指向数组第一个元素的指针,但其中一个例外情况不会,即数组用作 [=14= 的操作数时] 运算符。