为什么 malloc-ed 数组和非 malloced 数组的大小不同?

Why the size of malloc-ed array and non-malloced array are different?

#include<stdio.h>
#include<stdlib.h>

int main (int argc, char *argv[]) {

    int* arr1 = (int*)malloc(sizeof(int)*4);
    int arr2[4];


    printf("%d \n", sizeof(arr1));
    printf("%d \n", sizeof(arr2));

    free(arr1);

    return 0;
}

输出

8
16

为什么?

Arrays are not pointers.

在你的代码中,arr1是一个指针,arr2是一个数组。

arr1的类型是int *,而arr2的类型是int [4]。所以 sizeof 会产生不同的结果。你的代码相当于

sizeof (int *);
sizeof (int [4]);

就是说,sizeof 会产生 size_t 类型的结果,因此您应该使用 %zu 来打印结果。

arr1 是一个指针,当您调用 sizeof(arr1) 时,这将是您指针的大小。 但是 arr2 代表 4 个整数的内存块。