1

我在这个网站上寻找这个问题的答案已经很久了,但似乎仍然无法实现我的目标。没有我要添加的赋值语句,代码可以编译并正常工作。这段代码中的所有内容都是指针这一事实让我很困惑,但我无法改变这一点,它不是我的代码。我基本上只是想覆盖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  

代码非常长且复杂,我试图解析出与我的具体问题相关的内容。我试图让它成为一个完整的程序,但如果我搞砸了一些语法,我很抱歉。希望这足以理解赋值语句工作需要发生的事情。有人可以解释如何访问这些嵌套指针结构和指针数组的每一层吗?

4

1 回答 1

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];
            ^^^
于 2012-09-13T18:56:21.000 回答