数组长度...使用sizeof运算符时的不同输出

时间:2018-11-18 19:03:39

标签: c arrays sizeof

所以我只是在玩代码来查找数组长度。 原始代码为:

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。

1 个答案:

答案 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运算符的操作数时,