我绝不是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]
这个假设是正确的吗?
答案 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)
尽管如此,鉴于您的代码:
为了说明,这里是在调试模式下查看创建内容时显示的内容:(ANSI C99编译器,32位构建)
至少,完全理解作者的意思在陈述相同结果时很重要。
还说明了为什么 使用calloc()
而不是malloc()
可能是一个不错的选择(C99)。
第二部分问题: C ++版
int* BB = new int[size];
有效。