【发布时间】:2020-05-12 08:11:26
【问题描述】:
内存地址指定了它们在内存中指向的数据字节数,因此似乎任何变量的大小都是通过查看内存地址并查看变量在内存中占用的数量来确定的。那么数组的大小是怎么确定的??? - 因为默认情况下,数组是指向数组中第一项的指针:
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;
}
【问题讨论】:
-
你混淆了数组和指针这不是一回事
-
数组不是指针
-
“内存地址指定了它们在内存中指向的数据字节数”。不,他们没有。编译器根据变量的类型而不是内存地址来计算。
-
明显重复
-
Philip,为什么代码使用
"%lu"和sizeof(a)而不是"%zu"或其他?
标签: c arrays pointers sizeof memory-address