C语言中的指针和数组

时间:2014-05-05 21:48:38

标签: c arrays pointers

我绝不是C语言的大师,我也不会声称自己是。但我很确定我理解指针,直到我遇到这两个非常不同的实现,作者声称这些实现会有相同的结果。我只是没有看到它。有人可以向我解释一下这些都在做什么吗?

int (*AA)[4];
AA = malloc(sizeof(int[4])*size);

和第二个:

int *BB;
BB = (int *)malloc(size*sizeof(int));

从我目前的理解,如果我想用c ++制作第二个,它相当于:

int *CC;
CC=new int[size]

这个假设是正确的吗?

2 个答案:

答案 0 :(得分:3)

第一部分: int (*AA)[4];将AA定义为指向int [4]的指针。

AA = malloc(sizeof(int[4])*size);size int[4] s

分配存储空间

第二部分: int *BB;将BB定义为指向int的指针。

BB = (int *)malloc(size*sizeof(int));size int s分配存储空间,然后不必要地转换结果,从而引入一个您不会收到警告的潜在错误(即,如果是malloc的原型( )不在范围内。)

因此,结果可以说是不同的

答案 1 :(得分:0)

尽管如此,鉴于您的代码:

enter image description here

为了说明,这里是在调试模式下查看创建内容时显示的内容:(ANSI C99编译器,32位构建)

至少,完全理解作者的意思在陈述相同结果时很重要。
还说明了为什么 使用calloc()而不是malloc()可能是一个不错的选择(C99)。

第二部分问题: C ++版

int* BB = new int[size];  

有效。