C语言malloc问题

在Cpp reference上看到动态内存分配,p2和p3的代码应该怎么理解?,sizeof(int[4])是什么意思?

include <stdio.h>

include <stdlib.h>

int main(void)
{

int *p1 = malloc(4*sizeof(int));  // allocates enough for an array of 4 int
int *p2 = malloc(sizeof(int[4])); // same, naming the type directly
int *p3 = malloc(4*sizeof *p3);   // same, without repeating the type name

if(p1) {
    for(int n=0; n<4; ++n) // populate the array
        p1[n] = n*n;
    for(int n=0; n<4; ++n) // print it back out
        printf("p1[%d] == %d\n", n, p1[n]);
}

free(p1);
free(p2);
free(p3);

}

阅读 4.2k
3 个回答

sizeof(int)是代表int的占用的字节数是4个字节,然后再根据外面的4*4个字节就是16个字节
sizeof(int[4]),先看int[4]是代表分配一个连续的int类型的长度为4的存储单元,也就是说4*sizeof(int)大小,和第一个是一样的效果。
sizeof(4sizeof p3)后面的p3会被推算出是int类型所以是4个字节44字节=16字节。

在32 位系统下,int 和 指针 都占 4个字节

注释已经写得很明白了,我给你翻译一下吧。

int *p1 = malloc(4*sizeof(int));  // 申请一个足够容纳四个int变量的内存空间
int *p2 = malloc(sizeof(int[4])); // 效果同上, 直接按类型名(int[4])定义
int *p3 = malloc(4*sizeof *p3);   // 效果同上, 不用给出类型名了(前面 int *p3可以进行推断)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进