首页 > 解决方案 > 从 sizeof 返回的意外值

问题描述

我分配了一个数组a4 个块(每个块的大小sizeof(int))。然后我尝试使用以下代码打印数组的长度:

int main() {
    int *a = malloc(4 * sizeof(int));
    printf("%d", sizeof(a)/sizeof(a[0]));
    return 0;
}

一旦我运行了这段代码,它就会打印出来2,尽管我期望4. 为什么?

标签: c

解决方案


sizeofmalloc不是一个神奇的“我在这个指针中有多少空间”功能。您使用的习语仅适用于真正的数组,而不是作为数组取消引用的指针。在这里,它的意思是sizeof(int*)/sizeof(int),这显然没有用。


推荐阅读