为什么 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
为什么?
在你的代码中,arr1
是一个指针,arr2
是一个数组。
arr1
的类型是int *
,而arr2
的类型是int [4]
。所以 sizeof
会产生不同的结果。你的代码相当于
sizeof (int *);
sizeof (int [4]);
就是说,sizeof
会产生 size_t
类型的结果,因此您应该使用 %zu
来打印结果。
arr1 是一个指针,当您调用 sizeof(arr1) 时,这将是您指针的大小。
但是 arr2 代表 4 个整数的内存块。
#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
为什么?
在你的代码中,arr1
是一个指针,arr2
是一个数组。
arr1
的类型是int *
,而arr2
的类型是int [4]
。所以 sizeof
会产生不同的结果。你的代码相当于
sizeof (int *);
sizeof (int [4]);
就是说,sizeof
会产生 size_t
类型的结果,因此您应该使用 %zu
来打印结果。
arr1 是一个指针,当您调用 sizeof(arr1) 时,这将是您指针的大小。 但是 arr2 代表 4 个整数的内存块。