结构体数组之--[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的作用,完全不需要死记硬背几种定义方法。

(请大家批评指正)

  • 22
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程图一乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值