今天这篇,开头就不说那么多了,直接开门见山。
一、结构体类型:
说到结构体,首先举一个简单例子,如中国人身份证信息,上面有你的姓名、出生年月、家庭住址、身份证号码等。还有就是学校学生基本信息,如姓名、几年几班、家庭住址、出生年月、各科成绩等等,当然了,你完全可以使用基本类型一个个表达,一个学生的姓名可以使用字符串数组(或字符串指针)、成绩为float型,都可以,但是如果学生多了,就不太好表示了,编写程序会显得非常麻烦,因此可以将其打包,变成一种类型,如把一个学生的所有属性打包成一个类型,就成为学生类型吧,C语言就提供了这样一个机制,那就是结构体类型,这是非常厉害的,很实用。那么怎样声明一个结构体类型呢?C语言中声明结构体类型的关键字是struct,声明结构体类型的一般形式为:
struct 结构体名
{
成员列表;
};
结构体名只要符合C语言标识符的规则就可以,但是最好不要乱命名,最好能看到这结构体名就可以知道它的意思,如学生那么最好就命名成student。
①、结构体变量:比如定义学生一类的结构体:
struct student{
char name[20]; ………………学生姓名
char grade[20];…………………年级
int number;………………………学号
}student1,student3,student4…;
struct student student2;
上面声明了两个结构体变量student1、student3等等(变量名列表)和student2,第一个声明结构体类型时同时定义结构体类型变量,第二个student2,先声明结构体类型在定义结构体类型变量。当然了,结构体成员列表里也可以包含结构体类型的成员。
②、结构体变量的引用:
一旦定义好结构体类型的变量以后,那么就可以使用结构体变量了,当然不能囫囵吞枣整体使用,比如输出上面的学生信息printf("%s %s %d",student2);当然不可以,必须要细分,知道细分成基本类型的数据,当然如果成员是结构体类型,当然还要继续细分,直到变成基本类型数据,怎么细分呢?又多出了一个远算符.,名为成员运算符,优先级最高,可以这样:结构体变量名.成员名。如上面的可以取出一个成员,,其是基本类型数组,不必再细分,那么你就可以对其成员进行赋值了,如="mingge",当然了结构体成员变量也可以像基本类型一样进行算术运算,如。
③、结构体变量初始化:如下程序段:
struct student{
char name[20]; ………………学生姓名
char grade[20];…………………年级
int number;………………………学号 }student1,student2={"jay","三年二班",10030205};
struct student student1={"jone","三年班",10030605};
变量student2,在定义结构体变量时直接被赋予了初始值。也可以后来在赋值如student1,当然你也可以一个个的给成员列表里面的成员赋值,如struct student student3;;jone";;三年八班";。
二、结构体数组:
结构体也是一种类型,基本类型可以定义基本类型的数组,当然结构体类型也可以,其一般形式为:
struct 结构体名 数组名;
如上面的学生类型,struct student students[2],这样就声明了一个结构体类型的数组。上面的定义了一个结构体数组,但每个结构体数组元素又包含三个结构体成员,如果想要引用,可以先取出一个数组元素,如students[0],然后通过成员运算符引用成员,student[0].name。结构体数组中的元素在内存中也是连续的。
①、结构体数组初始化:
不多说,一般形式为:struct 数组名={初始值列表},如上面的struct student students[2]={{ "jay","三年二班",10030205},{ "jone","三年班",10030605}},当然也可以使用scanf输入函数,利用循环输入为每一个成员赋值。如scanf("%s",students[0].name),不需要取址运算符,因为成员name是一个字符数组,本身就代表着地址。
三、结构体指针:
其实只要你已经彻底理解指针这个概念及应用,那么结构体指针你一看就会知道如何去运用,很多时候知识都可以举一反三,不太难。一般形式为:
结构体类型 *指针名。
如上面学生的结构体类型,声明一个学生类型的指针为:struct student *pstudent。指针变量指向的都是变量的首地址,同样指向的也是结构体变量的首地址。
要想通过指针引用结构体变量的成员,有两种方法,其一:通过成员运算符,如(*pstudent).name,一般形式为(*指针名).成员名。一定要括号,因为成员运算符优先级比*优先级高。
其二:通过指向运算符(–>):一般形式为:指针名–>成员名。如pstudent–>name="jone"。如果结构体类型中又包含结构体成员,那么可以多次连续使用–>。如指针名–>成员名–>成员名…。
四、指向结构体数组的指针:
指针可以指向基本类型的数组当然也就可以指向结构体类型的数组,如上面的结构体数组,struct student students[2],通过指针指向此数组struct student *pstudent=students。同样指针指向结构体数组的首地址。当指针自加1(pstudent=pstudent+1),那么就指向了下一个数组元素,通过指针引用数组元素的具体成员可以这样:(*(指针名+n)).成员名。
上面就是对结构体类型的简单介绍,下一篇详细介绍链表及位段。
1.《指针结构体如何用scanf赋值、scanf给指针赋值》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《指针结构体如何用scanf赋值、scanf给指针赋值》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3302793.html