内存地址指定了它们指向内存中的数据字节数,因此似乎通过查看内存地址并查看变量在内存中占据多少来确定任何变量的大小。那么如何确定数组的大小呢? -因为默认情况下数组是仅指向数组中第一项的指针:
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是编译时的运算符。