【发布时间】:2016-01-12 21:20:55
【问题描述】:
我知道声明指向二维数组的指针的一种方法是这样的:
int(*p)[100];
然后将它分配给某物后,我可以使用这样的元素:
p[1][6] = 18;
但是假设我还不知道数组的维度,我打算在发现时对它们进行 malloc。
一个解决方案是我声明一个指向一个 int 的指针,然后使用指针算法来导航数组。我通常这样做,但这次为了方便起见,我想使用方括号表示法。
那么当我还不知道尺寸并且打算使用方括号表示法时,如何声明这个指针呢?
【问题讨论】:
-
有数组数组,也有指针数组。您可以使用后者来导航类似二维数组的结构,而无需事先知道尺寸。你不能在 C89 中使用前者,因为你甚至不能在不知道至少内部维度的情况下提及它的类型。在 C99 及更高版本中,您可以使用 VLA,但它们有其局限性。
-
@nm:
int (*p)[CONSTANT_LENGTH]是指向数组的普通指针,而不是 VLA 或类似的指针,那么为什么不符合 C89(撇开使用 C99 或 C11 通常是一个好主意除外) ?请注意,它不同于指针数组:int *p[CONSTANT_DIM]。 -
@Olaf 它当然是合规的,但需要事先知道 CONSTANT_LENGTH,这不是 OP 要求的。
-
@n.m.:对不起,我只读了
dimension,不是复数。但是,定义一个指向 VLA 的指针应该可以工作。