#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
为什么?
答案 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个整数的内存块。