我在这个网站上看起来很长很难以回答这个问题,但似乎仍然无法实现我的目标。代码编译和工作正常,没有我试图添加的赋值语句。事实上,一切都是这个代码中的一个指针,这让我感到困惑,但我不能改变它,它不是我的代码。我基本上只想覆盖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
代码很长很复杂,我试图解析与我的具体问题相关的内容。我试着让它成为一个完整的程序,但是如果我拙劣的语法,我很抱歉。希望这足以理解赋值语句需要发生什么才能发挥作用。有人可以解释如何访问这些嵌套指针结构和指针数组的每一层?
答案 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];
^^^