我知道它非常天真的问题,但我无法理解以下代码的作用。
#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.
答案 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)
答案 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以来已经很长时间了!