c语言结构体初始化的作用,C语言 初识结构体structre

有些数据具有内在的联系,并且成组出现,而为了反应这些数据之间的关系,我们希望把这些数据组成一个组合数据。而这种作用数组是不具备的,因为数组只能存放同一类型的数据。

C语言允许用户自己建立由不同类型数据组成的组合型的数据结构,也就是结构体。

一、建立结构体类型structre

用户指定一个结构体类型 struct 结构体名,则它就是一个在本程序中可以使用的合法类型名。

声明一个结构体类型的一般形式为:

struct 结构体名

{ 成员列表 };

作用:它向编译系统声明:struct 结构体名是一个“结构体类型”,包括不同类型的成员。它的整体和系统提供的标准类型(如int,char,floar等)具有相似的作用,在之后的程序中都可以定义变量。但是结构体在引用之前必须先声明。

说明:

结构体的成员都应该进行类型声明,即 类型名 成员名;

可以将已经声明的结构体类型作为另一个结构体的成员。

例如:

struct

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

{ int month;

int day;

int yeat;

};

struct

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

{ int num;

char

name[20];

char

sex;

struct

Date birthday; //成员birthday属于struct Date类型

};

则struct Student

的结构如图所示:

num

name

sex

birthday

month

day

year

注意:上面只是建立了一个结构体类型,但是没有定义变量,其中并没有具体的数据,系统并不分配内存,此时还不能使用。

二、定义结构体类型变量

方法1 先声明结构体类型,在定义该类型的变量

例如:

struct Student student1,student2;

方法2 在声明类型的同时定义变量

例如:

struct

Student

{ int

num;

char

name[20];

char

sex;

struct

Date birthday;

}

student1,student2;

方法3 不指定类型名而直接定义结构体类型变量,此时不能再以此结构体类型定义其他变量,只能使用声 明过的变量。

例如:

struct

{ int

num;

char

name[20];

char

sex;

struct

Date birthday;

}

student1,student2;

注意:

1)结构体类型的内存大小为所有类型成员的内存之和。

2)结构体类型(struct

Student )与结构体变量( student1,student2)并不相同。可以对结构体变量进行赋值、存取和运算,但不能对结构体类型进行这些操作。

3)结构体类型中的成员名可以与程序中的变量名相同,但是二者不能代表同一对象。

三、结构体变量的初始化和引用

1. 在定义结构体变量时对其成员初始化,例如:

struct Student a={.name="xieyi"}; //在成员名前有成员运算符 “ . ”

注释:".name"表示结构体变量 a 中的成员 a.name

。而其他未被初始化的数值型成员被系统初始化为0,字符型成员被初始化为‘\0',指针型成员被初始化为NULL。

2. 结构体变量的引用

引用结构体变量中成员的值,引用方式为 结构体变量名. 成员名 。“ . ”是成员运算符,其优先级最高,可以在程序中把 结构体变量名. 成员名(如student1.

num)作为一个整体来看待,此时其相当于一个变量。

注意:不能通过输出结构体变量名来输出结构体变量所有成员的值,只能对结构体变量中的各个成员分别进行输入和输出。

下面用法不正确:

printf("%s\n",student1);

3. 如果结构体成员本身是一个结构体类型,则要使用若干个成员运算符,一级一级地找到最低一级的成员,只能对最低级成员进行赋值或存取以及运算。

4. 同类的结构体变量可以互相赋值,例如:

student1=student2; //student1和student2已经定义为同类型的结构体变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值