二维指针作为结构

时间:2016-07-27 04:07:16

标签: c pointers

我是C编程的初学者所以我有一个基本的问题,在我的代码中的很多地方,我使用了一些具有双暗的结构。指针数组作为变量,如下例所示:

typedef struct example {

   char** elements;
   int number_elements;
   int x;
} example;

所以我通常是这样做的,我为结构分配内存,为可变元素分配数字x,

  example* e = malloc(sizeof(example);
  if (e == NULL) exit(EXIT_FAILURE);

  e->elements = malloc(sizeof(char*) * x); 
  if (e->elements == NULL) //throw error

  for (int i=0; i<x; i++) {
     e->elements[i] = malloc(sizeof(char)*1024);
     if (e->elements[i] == NULL) //throw error
  }

所以我动态地将元素添加到第二维。因此,如果2.nd维度已满,我会重新分配并更新x。

所以我的问题是,这个数字x有一个很好的或常见的方式可以隐藏,因为像这样我在结构中存储一个变量,用于其中的元素数量,另一个变量用于分配的实际元素数量,这只是丑陋的。

1 个答案:

答案 0 :(得分:3)

  

所以我的问题是,这个数字x有一个很好的或常见的方式可以隐藏,因为像这样我在结构中存储一个变量,用于其中的元素数量,另一个变量用于分配的实际元素数量,这只是丑陋的。

这并不难看。 x的值必须存储在某个地方。最好将struct本身作为成员使用,因为struct的两个实例可以具有不同的x值。从这个角度来看,让x作为struct的成员是最优雅的解决方案,与您的想法完全相反。