c - 如何在 C 结构中访问指向二维数组的指针?

标签 c arrays pointers struct

我在遵循 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/

相关文章:

c - 动态分配内存时 "pointer types"有什么意义?

php - $var[] = array() 和 $var = array() 有什么区别?

java - 从读取文件中分离结果的更好方法?

c++ - 协助避免断言......总是!

c - C 中的多线程问题

c - C 中 char 数组成员的默认值是多少?

C++ 复制构造函数,谁能解释为什么?

c++ - 如何使用冒泡排序对链表进行排序?

C编程,char*长度不能覆盖整个Array

c - 使用双指针和 malloc 读取文件