数组长度...使用 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运算符的上下文,aint [5]类型,但是,&a[0]int *类型。它们确实大小不一。按照同样的类比,&aint (*)[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= 的操作数时] 运算符。