为什么要使用结构体
如何使用结构体
声明结构体的一般形式为:
struct 结构体名 {
成员表列
};
例:
struct student{
//学号 姓名 年龄 性别
int num;
char name[20];
float age;
char sex;
};//结构体类型的声明
使用结构体的一般步骤
先声明结构体类型,再定义变量名
struct student s1,s2;
结构体scanf的读取和输出
#include<stdio.h>
struct student {
//姓名 年龄 性别 学号
char name[20];
float age;
char sex;
int num;
};//声明结构体类型
int main() {
//定义结构体变量
struct student s[3];
int i;
for (i = 0; i < 3; i++) {
scanf("%s%f %c%d", s[i].name, &s[i].age, &s[i].sex, &s[i].num);
}
for (i = 0; i < 3; i++) {
printf("%s %5.3f %c %d\n", s[i].name, s[i].age, s[i].sex, s[i].num);
}
return 0;
}
注意:
1.结构体类型的声明要放在main函数之前,这样在main函数中才可以使用,结构体类型的声明最后一定要加分号,否则编译不通过,结构体的初始化只能在一开始定义。
2.采用“结构体变量名.成员名”的形式来访问结构体成员。使用scanf读取标准输入时,必须是各成员取地址,然后进行存储。整型数据(%d)、浮点型数据(%f)、字符串型数据(%s)都会忽略空格,而字符型数据(%c)不会忽略,所以如果要读取字符型数据,那么就要在待读取的字符数据与其他数据之间加入空格。
结构体指针(重难点)
一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设置一个指针变量,用它指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。当然,指针变量也可以用来指向结构体数组中的元素。
结构体指针的偏移(掌握)
//结构体指针的使用
#include<stdio.h>
struct student {
//姓名 年龄 性别
char name[20];
int age;
char sex;
};//声明结构体的类型
int main() {
//定义结构体体变量并初始化
struct student s = { "zhuoshilin",23,'m' };
//定义结构体指针
struct student* p;
p = &s;//指针变量p的值为结构体s所占据的内存段的起始地址,即结构体s取地址赋值给p
//指针变量访问成员有两种方式
printf("%s %d %c\n", p->name, p->age, p->sex);
printf("%s %d %c\n", (*p).name, (*p).age, (*p).sex);//成员选择运算符优先级高于取值运算符
printf("------------------------------------\n");
//定义结构体数组并初始化
struct student sarry[3] = { "zhuoshilin",23,'m',"yintao",32,'w',"nba",30,'m' };
p = sarry;//指针变量的值为结构体数组所占内存片段的起始地址
printf("%s %d %c\n", p->name, p->age, p->sex);
//结构体指针的偏移
p = p++;
printf("%s %d %c\n", p->name, p->age, p->sex);
printf("------------------------------------\n");
int num;
num = p->age++;//num=p->age;(p->age)++;
printf("num=%d p->age++=%d\n",num, p->age);//32 33
num = p++->age;//num=p->age;p++;
printf("num=%d p->age++=%d\n", num, p->age);//33 30
return 0;
}