c 语言中的结构体,C 语言中结构体的定义和使用

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

文章目录

1. 声明

一般形式

struct 结构名{

成员列表

};

struct关键字表示接下来是一个结构

如:声明一个学生的结构struct Student{ //声明结构体

char name[20]; //姓名

int num; //学号

float score; //成绩

};

2. 定义

struct 结构体名 结构体变量名;struct Student stu1; //定义结构体变量

1. 结构体变量的定义可以放在结构体的声明之后:struct Student{ //声明结构体

char name[20]; //姓名

int num; //学号

float score; //成绩

};

struct Student stu1; //定义结构体变量

2. 结构体变量的定义也可以与结构体的声明同时struct Student{

char name[20];

int num;

float score;

}stu1; //在定义之后跟变量名

3. 可以使用匿名结构体来定义结构体变量struct { //没有结构名

char name[20];

int num;

float score;

}stu1;

3. 访问

虽然结构类似一个数组,只是数组元素的数据类型是相同的,而结构中元素的数据类型是可以不同的。但结构不能像数组那样使用下标去访问其中的各个元素,而应该用结构成员运算符点(.)。即访问成员的一般形式是:

结构变量名 . 成员名

如 stu1 . name 表示学生stu1的姓名。struct Birthday{ //声明结构体 Birthday

int year;

int month;

int day;

};

struct Student{ //声明结构体 Student

char name[20];

int num;

float score;

struct Birthday birthday; //生日

}stu1;

则用 stu1.birthday.year 访问出生的年份。

4. 初始化struct Student stu1, stu2; //定义结构体变量

strcpy(stu1.name, "Jack");

stu1.num = 18;

stu1.score = 90.5;

详细初始化过程查看参考1

5. 结构体数组

结构类型作为一种数据类型,也可以像基本数据类型那样,作为数组的元素的类型。元素属于结构类型的数组成为结构型数组。定义struct 结构名 {

成员列表

} 数组名[数组长度];struct Student{ //声明结构体 Student

char name[20];

int num;

float score;

}stu[5]; //定义一个结构结构数组stu,共有5个元素初始化struct Student stu[2] = {{"Mike", 27, 91},{"Tom", 15, 88.0}}; //定义结构数组的同时进行初始化

stu[2] = (struct Student){"Jack", 12, 85.0};//先定义后初始化

6. 结构体与指针

当一个指针变量用来指向了一个结构变量,这个指针就成了结构指针变量。

结构指针变量中的值是所指向的结构变量的首地址。可以通过指针来访问结构变量。

1)定义结构指针变量的一般形式:

struct 结构名 * 结构指针变量名struct Student *pstu; //定义了一个指针变量,它只能指向Student结构体类型的结构体变量

结构指针变量的定义也可以与结构体的定义同时。而且它必须先赋值后使用。

数组名表示的是数组的首地址,可以直接赋值给数组指针。但结构变量名只是表示整个结构体变量,不表示结构体变量的首地址,所以不能直接赋值给结构指针变量,而应该使用 & 运算符把结构变量的的地址赋值给结构指针变量。即:pstu = stu1;//false

pstu = &stu2; //OK

注意:结构名、结构变量名、结构体体指针的区别

2)通过结构指针间接访问成员值

访问的一般形式:

(*结构指针变量). 成员名 或 结构指针变量 -> 成员名

如:(*pstu).name

pstu->name

注意(pstu)的小括号不能省略,因为成员符“.”优先级为1,取地址符“”优先级为2,去掉括号就相当于*(pstu.name)了。

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值