初始化嵌套在C中结构数组中的结构数组
目的是将一个结构数组包含在另一个结构的另一个数组中。两个结构数组应分别声明和初始化。提问者和回答者建议,同样地,我的提问只有一个部分,但没有这个或类似的组合。 我在这里添加的代码只是一个简化的示例。所有数组大小和元素在执行之前都是已知的 这是示例代码,无法编译“分段错误”:初始化嵌套在C中结构数组中的结构数组,c,arrays,pointers,structure,C,Arrays,Pointers,Structure,目的是将一个结构数组包含在另一个结构的另一个数组中。两个结构数组应分别声明和初始化。提问者和回答者建议,同样地,我的提问只有一个部分,但没有这个或类似的组合。 我在这里添加的代码只是一个简化的示例。所有数组大小和元素在执行之前都是已知的 这是示例代码,无法编译“分段错误”: #包括 #包括 结构学生课程详情 { 国际课程号; char course_name[50]; }; 结构学生详细信息 { int-id; 字符名[20]; //结构中的结构 结构学生课程详情*课程[2]; }stu数据[2
#包括
#包括
结构学生课程详情
{
国际课程号;
char course_name[50];
};
结构学生详细信息
{
int-id;
字符名[20];
//结构中的结构
结构学生课程详情*课程[2];
}stu数据[2],*stu数据[2];
结构学生课程详细课程数据[2]={
{71145,“课程1”},
{33333,“课程2”},
};
结构学生详细信息学生数据[2]={
{1,“Anna”&课程数据[1]},
{2,“Tom”&课程数据[2]}
};
int main()
{
stu_data_ptr[2]=&stu_data[2];
printf(“Id是:%d\n”,stu_data_ptr[0]->Id);
printf(“名称为:%s\n”,stu_data_ptr[0]->名称);
printf(“课程Id为:%d\n”,
stu_数据_ptr[0]->课程[0]->课程id);
//printf(“课程名称为:%s\n”,
//stu_数据_ptr[0]->课程[0]->课程名称);
//printf(“课程Id为:%d\n”,
//stu_数据_ptr[0]->课程[1]->课程id);
//printf(“课程名称为:%s\n”,
//stu_数据_ptr[0]->课程[1]->课程名称);
返回0;
}
链接到代码示例:结构成员
course
是指向struct student\u course\u detail
的两个指针数组
从您试图初始化它的方式判断,它不应该是数组,而应该是指向struct student\u course\u detail
:
struct student_course_detail *course; // Pointer to a single student_course_detail structure
您在其他地方也有类似的问题(stu-data\u-ptr
)
另外,不要忘记数组索引是零基的,因此
&course\u data[2]
超出course\u data
数组的范围。当您定义一个包含n个元素的数组时,元素的索引范围从0到n-1
因此,在本例中,所有数组的大小都是2,因此您拥有的元素都由0和1索引
例如,这是非法的:
stu_data_ptr[2] = &stu_data[2]; //illegal
您可以执行以下任一操作:
stu_data_ptr[1] = &stu_data[1];
或
我用我想要的方式运行代码。但是我仍然得到警告:main.c:32:18:warning:assignment from compatible pointer type如何正确分配指针?
stu_data_ptr[1] = &stu_data[1];
stu_data_ptr[0] = &stu_data[0];//use this, since you use stu_data_ptr[0] later