Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初始化嵌套在C中结构数组中的结构数组_C_Arrays_Pointers_Structure - Fatal编程技术网

初始化嵌套在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