以下c ++代码的作用是什么

时间:2011-07-09 18:09:55

标签: c++ arrays malloc

我知道它非常天真的问题,但我无法理解以下代码的作用。

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

请提供完整的说明,包括p。

的类型和大小
It is just for learning purpose. I am not using this code in any real application.

5 个答案:

答案 0 :(得分:5)

据我所知,这是胡言乱语。你可能意味着(int(*)[MAXCOL])

在C中,这意味着编写它的程序员不知道指针类型转换的工作原理。

在C ++中,它意味着您正在分配一个数组数组。 p是一个数组指针,所以* p是一个大小为MAXCOL的数组,你可以为MAXROW分配这样的数组。结果是“受损”的2D阵列。使用这种相当模糊的语法的优点是你得到一个2D数组,其中包含相邻内存中的每个单元格,这是你不会用更常见的指针到指针动态2D数组实现的。

答案 1 :(得分:4)

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

// p = (*)[MAXCOL]malloc(MAXROW*sizeof(*p));
p = (int(*)[MAXCOL])malloc(MAXROW*sizeof(*p));

我的回答是:

在C 中不要转换malloc的返回值。它最多是冗余的,并且可能在出现时隐藏错误。只需做

p = malloc(MAXROW * sizeof *p);

答案 2 :(得分:2)

这不是有效的代码in C or C++

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

答案 3 :(得分:1)

正如您可以从this question学习的那样,int (*p)[MAXCOL]是指向MAXCOL整数数组的指针。

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

答案 4 :(得分:1)

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

    typedef int[MAXROW][MAXCOL] table;

    table *p = new table;

如果在编译时已知数组的维数,则此代码才可用。

这是大多数c ++ - prgrammers定义p:

的方式
    using namespace std;
    vector<vector<int> > p;

这允许更灵活的编程方式。

G,伙计们,自从我编写K&amp; R C以来已经很长时间了!