我在遵循 struct
将其用作 Matrix 时遇到了问题
struct{
int col;
int row;
int (*p)[col];//In this line compiler is giving error, saying col undeclared here.
}Matrix;
我在网上搜索了一下,找到了一个写的解决方案
int (*p)[col]
作为
int (*p)[]
编译器通过了它,没有问题。
但是当我想使用 Matrix
变量增加 p 时,比如 m
++(m.p);
编译器在同一行代码中给出了另一个错误(两个),它说
增加指向未知结构的指针。
对指向不完整类型的指针进行算术运算。
请告诉我为什么编译器会出现上述错误?
我最终想要的是在指向二维 动态 整数数组的结构中有一个指针。 那么,怎么做呢???
最佳答案
如果你真的想要一个指向任意变化的二维数组的指针,你将不得不使用一个空指针。 (我不推荐它,它不安全,设计可能应该改变。)
struct
{
int col;
int row;
void* p;
}
在访问内存之前,使用局部变长数组指针。获取结构中的 void 指针,并将其分配给 本地 vla 指针,使用结构中的信息:
struct Matrix x = ...;
int (*n)[x.col] = x.p;
然后使用它:
n[0][0] = ...
如果你想增加结构中的 void 指针,只需增加局部指针,然后将其分配回 void 指针:
n++;
x.p = n;
不需要强制转换,只需声明一个本地指针。如果这很麻烦,可以使用内联函数来抽象结构中对 void 指针的操作。为了安全起见,也应该这样做。
关于c - 如何在 C 结构中访问指向二维数组的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35252030/