访问C中指针结构中的指针数组

时间:2012-09-13 18:51:42

标签: c arrays pointers struct

我在这个网站上看起来很长很难以回答这个问题,但似乎仍然无法实现我的目标。代码编译和工作正常,没有我试图添加的赋值语句。事实上,一切都是这个代码中的一个指针,这让我感到困惑,但我不能改变它,它不是我的代码。我基本上只想覆盖x_array的所有值(仅在bs的第一个索引中)作为y_array中存储的值。这是程序结构:

typedef struct
{
  double *x_array;
} b_struct;
typedef struct
{
  b_struct *bs;
} a_struct;

void fun_1(a_struct *as);
void allocate_b(b_struct *bs);
void allocate_a(a_struct *as);
int main(void)
{
  a_struct *as
  as = (a_struct *)malloc(sizeof(a_struct));
  allocate_a (as);
  fun_1 (as);
  // everything internal to sa is deallocated in separate functions
  free (as);
  return (0);
}
void allocate_a(a_struct *as)
{
   int i;

   if ((as->bs =(b_struct *)malloc(5*sizeof(b_struct))) == NULL)
   {
     printf("Error: Not enough memory!\n");
     exit(1);
   }
     for(i=0;i<5;i++) allocate_b (&(as->bs[i]));
  return;
}
void allocate_b(b_struct *bs)
{
  if ((bs->x_array =(double *)malloc(10*sizeof(double))) == NULL)
    {
      printf("Error: Not enough memory!\n");
      exit(1);
    }
  return;
}

void fun_1(a_struct *as)
{
  int i;
  double y_array[10]; // the values i need are read into this array
  // the following line is what will not compile
  for (i=0; i<10; i++) as->bs[0]->x_array[i]=y_array[i];
  return;
}  

我尝试过添加&*()的许多排列,但每次我都会这样做:

error: expression must have pointer type  

代码很长很复杂,我试图解析与我的具体问题相关的内容。我试着让它成为一个完整的程序,但是如果我拙劣的语法,我很抱歉。希望这足以理解赋值语句需要发生什么才能发挥作用。有人可以解释如何访问这些嵌套指针结构和指针数组的每一层?

1 个答案:

答案 0 :(得分:2)

for (i=0; i<10; i++) as->bs[0]->x_array[i]=y_array[i];

在您的代码中,bs[0]不是指针,而是b_struct。将该行更改为:

for (i=0; i<10; i++)
    as->bs[0].x_array[i]=y_array[i];
            ^^^