【发布时间】:2021-11-15 20:11:41
【问题描述】:
考虑以下 C 代码 sn-p:
int main() {
int *crr;
int arr[] = {1, 2, 3, 45};
crr = (int *)malloc(sizeof arr);
printf("%ld\n", sizeof arr);
printf("%ld", sizeof crr);
return 0;
}
以上代码的输出是:
16
8
我有 64 位架构系统。因此,int 是 4 个字节。需要解释或任何参考来说明为什么会发生这种情况。我为crr 分配了相同数量的内存。
【问题讨论】:
-
sizeof array!=sizeof pointer。您可能会喜欢comp.lang.c faq 的第 6 部分。 -
@pmg 所以我可以安全地做
crr[3] = 4 -
是的,在这种情况下。因为
sizeof arr足够大(它是 * == )。crr指向一个16字节的内存块,足够4个整数的空间;arr是一个内存块,有足够的空间容纳 4 个整数。 -
正确!
crr是一个指针;sizeof crr给出指针的大小。 -
crr[3] = 4仅在您验证crr != NULL后才是正确的
标签: c malloc dynamic-memory-allocation