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

标签 c arrays sizeof

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

#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 的上下文运算符(operator),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。

请记住,在某些情况下,数组类型会退化为指向数组第一个元素的指针,但其中一个异常(exception)情况不会退化,即数组用作 sizeof 的操作数时。运营商。

关于c - 数组长度...使用 sizeof 运算符时的不同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53364448/

相关文章:

c++ - 计算固定数组中元素的数量(类似于 sizeof)

c - C 编译器如何为位域定义的结构分配结构内存?

PHP 对象索引作为字符串?

java - 有没有办法确定一个对象在java中有多大?

c - GtkFixed : inner widget ignores the coordinates 的用法

java - Java 和 C 之间传递值

c - 宏内不正确的未初始化变量警告

c - 使用 C 将二进制文件读入结构体,处理 char [8]

javascript - 用于多个选择选项下拉列表的本地存储

c - 指向链表指针数组的指针