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

时间:2016-09-12 06:10:49

标签: c arrays pointers malloc sizeof

#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

为什么?

2 个答案:

答案 0 :(得分:2)

<强> Arrays are not pointers

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

arr1的类型为int *,而arr2的类型为int [4]。所以sizeof会产生不同的结果。您的代码等同于

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

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

答案 1 :(得分:0)

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