首页 > 解决方案 > C语言:C语言中数组的大小究竟是如何计算的

问题描述

内存地址指定了它们在内存中指向的数据字节数,因此似乎任何变量的大小都是通过查看内存地址并查看变量在内存中占用多少来确定的。那么数组的大小是怎么确定的???- 因为默认情况下,数组是指向数组中第一项的指针:

int main() {
    int a[] = {1,2,3,4,5};
    // both show same memory address
    printf("%p\n", a);
    printf("%p\n", &a[0]);
    // somehow the entire size of a is calculated
    printf("%lu\n", sizeof(a)); // 20 (all elements)
    return 0;
}

标签: carrayspointerssizeofmemory-address

解决方案


当你写

int a[] = {1,2,3,4,5};

编译器已经知道“a”里面只有 5 个整数。

你打电话时

sizeof(a)

您的编译器(不是您的程序)将计算 a 的大小。这基本上在您的程序中设置了数字“20”。每次你的程序运行时,它都会输出数字 20,它不会使用 sizeof。这不是在运行时评估的,而是在编译时评估的,因为在您的情况下 sizeof 是一个编译时运算符。(需要注意的是,当您有可变长度数组时,可以在运行时评估 sizeof)


推荐阅读