C语言:C中数组的大小到底是怎么计算的
C language: How exactly is the size of an array calculated in 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;
}
写的时候
int a[] = {1,2,3,4,5};
编译器已经知道 "a" 里面只有 5 个整数。
当你打电话给
sizeof(a)
你的编译器(不是你的程序)会计算a的大小。这基本上在您的程序中设置了数字“20”。每次你的程序运行时,它都会输出数字 20,它不会使用 sizeof。这不是在运行时评估的,而是在编译时评估的,因为在您的情况下 sizeof 是编译时运算符。
(需要注意的是,当你有可变长度数组时,sizeof 可以在运行时计算)
内存地址指定了它们在内存中指向多少字节的数据,因此似乎任何变量的大小都是通过查看内存地址并查看变量在内存中占用多少来确定的。那么数组的大小是如何确定的呢??? - 因为默认情况下数组是仅指向数组中第一项的指针:
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;
}
写的时候
int a[] = {1,2,3,4,5};
编译器已经知道 "a" 里面只有 5 个整数。
当你打电话给
sizeof(a)
你的编译器(不是你的程序)会计算a的大小。这基本上在您的程序中设置了数字“20”。每次你的程序运行时,它都会输出数字 20,它不会使用 sizeof。这不是在运行时评估的,而是在编译时评估的,因为在您的情况下 sizeof 是编译时运算符。 (需要注意的是,当你有可变长度数组时,sizeof 可以在运行时计算)