C++ 以下c++;代码do

C++ 以下c++;代码do,c++,arrays,malloc,C++,Arrays,Malloc,我知道这是一个非常幼稚的问题,但我无法理解下面的代码是做什么的 #include <malloc.h> #define MAXROW 3 #define MAXCOL 4 int main(){ int (*p)[MAXCOL]; p = (int (*)[MAXCOL])malloc(MAXROW*sizeof(*p)); } 假设您指的是未注释的行(另一行是原始行,它在C中无效) 我的答案是: 在C中,不要强制转换malloc的返回值。它充其量是冗余的,并且可能在出现错误时隐藏

我知道这是一个非常幼稚的问题,但我无法理解下面的代码是做什么的

#include <malloc.h>
#define MAXROW 3
#define MAXCOL 4
int main(){
int (*p)[MAXCOL];
p = (int (*)[MAXCOL])malloc(MAXROW*sizeof(*p));
}

假设您指的是未注释的行(另一行是原始行,它在C中无效)

我的答案是:

在C中,不要强制转换
malloc
的返回值。它充其量是冗余的,并且可能在出现错误时隐藏错误。干脆

p = malloc(MAXROW * sizeof *p);
这不是有效的代码


所以,它根本没有“做”任何事情。

据我所知,它是胡言乱语。您可能是指
(int(*)[MAXCOL])

在C语言中,这意味着编写它的程序员不知道void指针类型转换是如何工作的

在C++中,这意味着你正在分配数组数组。p是一个数组指针,所以*p是一个大小为MAXCOL的数组,您可以分配MAXROW这样的数组。结果是一个“损坏”的二维阵列。使用这种相当晦涩的语法的一个好处是,你得到了一个2D数组,它的每个单元都在相邻的内存中,这是使用更常见的指针指向指针动态2D数组所无法实现的。

正如你可以从中了解到的,
int(*p)[MAXCOL]
是指向一个MAXCOL整数数组的指针


p=(int(*)[MAXCOL])malloc(MAXROW*sizeof(*p))
为MAXCOL整数的MAXROW数组(即二维数组)分配内存,并设置
p
指向它。

我没有编译以下代码,但我认为它是有效的c++代码:

    typedef int[MAXROW][MAXCOL] table;

    table *p = new table;
只有当数组的维度在编译时已知时,此代码才可能出现

这是大多数c++程序员定义p的方式:

    using namespace std;
    vector<vector<int> > p;
使用名称空间std;
向量p;
这允许更灵活的编程方式


G、 伙计们,我已经很久没有为K&R C编程了

你想让
而不是
更“标准:)闻起来像作业?如果是,请相应地标记。此外,我们不是服务站点,你可以让我们做你的工作。代码气味如C,标题称C++(这是可怕的代码),标签都说。它是哪一个?@Xeo-它不是家庭作业!另外,你是否拥有StAcExoPad?代码是P.J. Plauger博士(谷歌He)的WrrITEN,他在书中把它标记为C++。尼廷:你决定要写哪种语言了吗?你能告诉我们吗?指针指向动态2D数组是如何“更常见”的?它们要复杂一个数量级,需要循环来填充它们。这似乎是教授动态2D数组最常用的方法,出于某种原因,我不知道为什么,因为指针指向的指针数组与静态2D数组不兼容,这使得编写处理这两种数组的通用函数非常困难。多么奇怪啊!它们不是动态二维阵列。它们是指针的动态数组(如您所说)。
    typedef int[MAXROW][MAXCOL] table;

    table *p = new table;
    using namespace std;
    vector<vector<int> > p;