【发布时间】:2012-12-01 11:36:24
【问题描述】:
我想用 C 创建一个二维数组。
例如,我创建了一个名为 place 的 int 类型变量,如下所示:
int *place;
我有一个游戏,其中包含行和列等变量。 我希望我的 place 变量是一个二维数组,其行和列的动态分配(对于数组的最大大小),在“正常”声明中看起来像这样:
place[rows][columns];
但我不知道如何使用动态分配。
对于一维数组我会这样做:
place = (int*) malloc (levels * sizeof(int));
但我不知道如何处理二维数组。
编辑:
如何用 char 而不是 int 重写它?
我试图用字符覆盖整数,但它不起作用。
【问题讨论】:
-
您能否展示一下您尝试将它用于
chars 并说明它是如何不起作用的?所有答案都独立于基本类型,您只需在适当的位置替换类型名称。 -
我做了一个这样的变量:char place;然后: (*place)[columns] = malloc(rows * sizeof *place);但它不起作用,比如地点类型冲突
-
不,语法(诚然不是一个好的语法,IMO)是
char (*place)[columns];将place声明为指向columnschars 数组的指针,char (*)[columns]。您可以像往常一样在声明后立即初始化,char (*place)[columns] = malloc(rows * sizeof *place);。 -
我试过了,现在说初始化元素不是常量。我尝试将列和行设为常量,但也不好。
-
如果它抱怨初始化器不是常量,这意味着您的对象具有静态存储持续时间。这改变了事情。 a) 静态对象需要用于初始化程序的常量表达式,b) 静态对象不能具有可变修改的类型。如果
columns可以是一个常量表达式,你仍然可以声明char (*place)[columns];,并且1.如果它在文件范围内,malloc在main中,2.如果它有函数范围,有一个静态保护变量和malloc首次调用该函数时。如果rows和columns两者都可以是常量表达式,请使用char place[rows][columns];。