结构体数组之--[Error] expected primary-expression before ‘[‘ token
省时助手: 讲的是“结构体数组”的报错,访问,赋值等等。已经报错[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的作用,完全不需要死记硬背几种定义方法。
(请大家批评指正)
更多推荐
所有评论(0)