所以我只是在玩代码来查找数组长度....原始代码是:
#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;
}
Run Code Online (Sandbox Code Playgroud)
这给了我输出:
五
但是当我把表达式改为:
al= sizeof(&a[0]) / sizeof(a[0]);
Run Code Online (Sandbox Code Playgroud)
它给了我输出
2
如果a是&a[0]......那么为什么会这样?另外,如果&a代替&a[0]答案也是2.
不,他们的类型不同.
对于sizeof运算符的上下文,a属于类型int [5],但是&a[0]属于类型int *.它们确实有不同的大小.按照相同的类比,&a类型int (*)[5]- 基本上是指针.
所以,对于表达
al= sizeof(a) / sizeof(a[0]);
Run Code Online (Sandbox Code Playgroud)
是相同的
al= sizeof( int [5]) / sizeof(int);
Run Code Online (Sandbox Code Playgroud)
这给了你5.另一方面,
al= sizeof(&a[0]) / sizeof(a[0]);
Run Code Online (Sandbox Code Playgroud)
是相同的
al= sizeof(int *) / sizeof(int);
Run Code Online (Sandbox Code Playgroud)
现在看来,在你的平台上,它sizeof(int *)是8并且sizeof(int)是4,所以你可以看到2的结果.
请记住,在某些情况下,数组类型衰减到指向数组的第一个元素的指针,但是其中一个例外情况是,当数组用作运算sizeof符的操作数时.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |