c语言结构体里有直针,c语言之结构体详解

本文详细解析了C语言中结构体的引入、定义、赋值,以及结构体变量的初始化,特别强调了结构体数组的使用,包括数组定义、初始化和元素引用。此外,还讨论了结构体指针的重要性。适合复习和初学者了解数据结构的聚合方式。
摘要由CSDN通过智能技术生成

以前Fire也记得这部分也看过一段时日,也看的似懂非懂的样子,不过时间也长了,忘

的也差不多了。这几天看到这部分,感觉看的也挺透彻的,刚好弥补了以前的不足,同时也

把他记录下来,为以后可回忆留个脚印。。。​

0:结构体的引出:

​所有的变量大多数都是相互独立、无内在联系的。例如定义了整型变量a,b,c,他们

都是单独存在的变量,在内存中的地址也是互不相干的,但是在实际生活和工作中,有写数

据是有内在联系的,成组出现的。例如一个学生的学号、姓名、性别、年龄、成绩家庭地址

等项,是属于通一个学生的。如果把他们定义为不想干的变量,难以反映他们之间的内在练

习。人们希望把这些数据组成一个组合数据,有的人可能会想到数组,能否哟哥一个数组来

从方这些数据呢?显然不行。因为一个数组中只能存放同一类的数据。例如:整型数组

可以存放学号或成绩,但是不能存放姓名、性别等字符型的数据。

如图:

a4c26d1e5885305701be709a3d33442f.png

c语言允许用户建立由不同类型数据组成的组合型的数据结构,它称为结构体。

​结构体变量

一:结构体定义:

​结构体(structure):聚合数据类型,提供一种把相关数据组合到一起的手段。

​1:通常,结构中的成员都是逻辑的。

2:在商业软件中,成员变量一般习惯以下划线(_)开头,结构变量在被定义后,编译器在

编译时为所有的成员分配内存。

3:结构体赋值:可以把一个结构变量的全部内容赋值给另一个同类的结构变量,而

不必逐个成员的赋值。注意与数组的区别:数组是不能被此赋值的,是因为数据名是

一个常量指针。数组是一个数据类型的聚焦,他本质上不是数据类型。

4:向函数传递结构时,实际上是传递结构成员的值,即都是值的传递。包括用结构体变量

作函数参数及函数返回一结构体变量两种情况。

注意:与数组的区别:结构体变量名仅代表值,而非地址。

5:结构体类型定义​

struct 结构体名

{

类型标识符

成员名;

类型标识符

成员名;

.............

};

​注意:struct是关键字。结构体名是合法的标识符,可以省去(无名结构体)。成员类型可以是基本型(int、char..)或构造型(构造一个结构体:结构体嵌套)。

​二:结构体变量定义:

​直接定义结构体变量,一般形式:​

struct 结构体名

{

类型标识符

成员名;

类型标识符

成员名;

.............

}变量名链表;

例:

struct

student

//声明一个结构体类型struct

student

{

int

num;

char

name[20];

char

sex;

int

age;

float

score;

char addr[30];

}stu1,stu2;

//定义两个结构体变量

注意:

​1:结构体类型与结构体变量概念不同。

结构体类型:不分配内存;变量:分配内存

结构体类型:不能赋值、存取、运算;变量:可以

例如:stu2.score=stu1score  -------(赋值运算)

student1.age++

------------(自加运算)

2:在scanf函数中成员num,sex,age,score这些都要有取地址符号(&),但name和addr就不需要了。因为name和addr是数组名本来就是地址,所以不能画蛇添足的加上&。

例如:

scanf(“%d%s”,&stu1.num,stu1.name);(必须是结构体变量名.成员名。

“.”是成员运算符,优先级最高)​

​三:结构体变量的初始化

一般形式:

struct 结构体名

{

类型标识符

成员名;

类型标识符

成员名;

.............

};struct 结构体名 结构体变量={初始数据};

​例:

​struct student stu1={112,"Wang

Lin",'M',19,"200 Beijing Road"};

​还有一种形似是直接在“}”后面stu1={112,"Wang

Lin",'M',19,"200 Beijing Road"};(个人比较喜欢使用第二种方式写)

结构体数组

一:结构体数组的引出:

一个结构体变量只能存放一个学生信息,对于多个学生的信息,我们可以使用一个结构体数组来存放,结构体数组的每个元素是一个结构体类型的变量。

​ 定义结构体数组的方法与定义普通数组的方法类似:

结构体类型 数组名[数组长度];

​例如:

struct

student

{

char

name[10];

int

age;

int

s1,s2;

};

struct student

st[6];

[*]提倡用这种方法,个人喜欢用这个形式。

​二:结构体数组的初始化:

将每个数组元素的数据用话括号{

}括起来

struct

student

{

char

name[10];

int

age;

int

s1,s2;

};

struct student

st[3]={{"Mary",21,78,86},{"Alex",20,90,80},

{"Fire",22,99,98}};

[*]建议用这中格式

​三:结构体数组元素的引用

例如:printf("%d%d",st[1].age,st[1].s1);

【*】数组元素直接可以整体赋值

例如:st[2]=st[0];

​结构体指针

未完,待续.......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值