c - 如何索引包含指向结构指针的指针的结构,该结构是 malloc block

标签 c pointers struct

我创建了一个结构

typedef struct t{
     int top;
     int value;
  }s;

和另一个结构

typedef struct y{
      int top1;
      s **p
 }z;
  z *p1;

通过 malloc 创建一个 block

p1 = (z*) malloc(sizeof(z));
p1->p = (s**) malloc(10 * sizeof(s));

我尝试通过索引 s 结构化 block

p1->p[4]->top;

但是我得到了错误。有没有办法在 C 中将指针索引到指针类型

最佳答案

用单指针寻址。

typedef struct y{
    int top1;
    s *p; //Single pointer only
}z;

z *p1;
p1 = malloc(sizeof(z)); //Don't cast...
p1->p = malloc(10 * sizeof(s));

//And then:
p1->p[4].top;

如果你还想要双指针,那么:

typedef struct y{
    int top1;
    s **p;
} z;

z *p1;
size_t i;

p1 = malloc(sizeof(z)); //Create z structure object
p1->p = malloc(10 * sizeof(*p1->p)); //Create array of pointers to objects

//Now fill that array with your objects
for (i = 0; i < 10; i++) {
    p1->p[i] = malloc(sizeof(*p1->p[i]));
}

//Now access to property as:
p1->p[4]->top; //Do something.

第二个选项不太可取,但取决于您,因为对连续 10 个对象执行单个 malloc 比对单个对象执行 10 倍和第 11 次初始化指针基数组更有效。

关于c - 如何索引包含指向结构指针的指针的结构,该结构是 malloc block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44531866/

相关文章:

C Bison GLR const 堆栈项

c - 这个带有两个递归调用的 return 语句如何工作?

C - (ptr = = &ptr) 什么是*ptr?

c - 使用指针将结构体添加到数组

C 数组结构,尝试访问数据,但对所有数组都得出相同的结果

c - 使用链接器构建程序但运行可执行文件显示 'No such file or directory'

c - 在 C 中的 .gz 文件中搜索模式

c - 编写一个返回最近日期的函数

c++ - 创建哈希表来存储某个指针的值

c++ - qsort 与结构数组?