省时助手:  讲的是“结构体数组”的报错,访问,赋值等等。已经报错[Error] expected primary-expression before '[' token的原因。[Error] expected primary-expression before '[' token。

在给结构体数组赋值的时候,出现的编译错误,这其实只是一个基本概念的问题,但我当时习惯打开百度搜一下,发现很多都是关于头文件等等复杂的叙述。故复述了此问题。

原因:在加了typedef的结构体中,数组stu[10]被当作别名。

解决办法:删除typedef。或使用下面详述的方法定义结构体数组。


详解: 

主要原因还是对结构体类型的陌生:

第一种定义方法(适用于只给学生做一个信息表):

struct student 
{
		long stuid;
		char name[10];
		int age;
		int score;
}stu[10];
	
stu[1].stuid=1;  //这样就可以给数组中的元素赋值,简单写法是这样。


for(int i=0;i<10;i++) //对定义的结构体数组进行输入赋值
{
	scanf("%d  %c%d%d",&stu[i].stuid,&stu[i].name,&stu[i].age,&stu[i].score);
		 
}

第二种定义方法(适用于给学生和老师都要做信息表):

typedef struct infomation  
	{
		long stuid;
		char name[10];
		int age;
		int score;
	}infor;              //起别名,如果不加typedef ,那么表达的含义为“infor是一个结构体变量”
                                
	
	infor student[40]; //假设40个学生,5个老师,这样每个人的信息都可以设置。
	infor teacher[5]; 

换一种写法,看的清楚些:

struct infomation   //information是这个结构体的名字,也叫做结构体的“标签”
	{
		long stuid;
		char name[10];
		int age;
		int score;               //结构体成员
	};
	
	struct infomation student[40];  //结构体变量
	struct infomation teacher[5]; 

 错误写法:

这种定义方法在定义结构体类型的同时已经定义了结构体变量为infor,这种情况下,名字为information的结构体类型(结构体模板)只有一个infor变量可以使用。所以infor 后边加student 变量的时候,会报错,因为此时infor 后面只能加成员名字。而在第一句加入typedef 时,infor就相当于information的别名。 

关键字 typedef 为已经存在的数据类型定义一个别名。

数据类型分为基本数据类型构造(自定义)数据类型(还有很多叫法)。

基本数据类型五种:int ,float ,double ,void ,char

构造:结构体类型,数组类型,指针类型,枚举类型,共用体类型,等等。

 

 

 在很多文章和视频中,规范的给出了三种定义方法,但其实我们只要理解了结构体类型,结构体标签,结构体成员,结构体变量,已经typedef的作用,完全不需要死记硬背几种定义方法。

(请大家批评指正)

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐