学习
错题
模考
我的
登录/注册/忘记密码
学习 / 结构体 / 结构体的定义与使用
结构体的定义与使用
成员与点号;typedef;箭头
1. 把一组相关数据捆在一起
数组是**同一类型**排成一排;结构体是把**一组相关、类型可以不同**的数据捆成一个新类型。 ```c struct Student { int id; int score; }; struct Student a; a.id = 1; a.score = 90; printf("%d %d\n", a.id, a.score); ``` 读法:`struct`、类型名(这里是 `Student`)、花括号里列出**成员**。`a` 是这个类型的一个变量。 - 取出成员用**点号**:`a.id`、`a.score` - 定义时可一起赋初值:`struct Student b = {2, 88};`(按成员顺序填) - 定义完以后不要再写 `a = {1, 90}`;要改就 `a.id = 1;` - 读某一个成员:`scanf("%d", &a.id)`,地址取的是那个 `int`,不是整个 `a` 两个结构体变量可以整体赋值:`c = a;`,等于把每个成员抄过去。专升本先会:**定义、点号、初值、scanf 时加 &**。
2. typedef 给类型起短名字
每次都写 `struct Student` 有点长。`typedef` 给类型起一个**短名字**: ```c typedef struct { int id; int score; } Student; Student a; /* 不用再写 struct */ a.id = 1; ``` 读法:最后那个 `Student` 是新类型名,不是变量名。`a` 才是变量。 也可以带标签,后面链表会用到这种: ```c typedef struct Student { int id; int score; } Student; ``` 这时 `Student a;` 和 `struct Student a;` 都能写。 `typedef` 不是结构体专用。`typedef int Age;` 是把 `int` 叫做 `Age`,同一件事:给类型起别名。它**不分配变量**,只是换个更好认的名字。
3. 指针取成员用箭头
结构体也有地址。指针指向结构体变量时,取成员用 `->`,和 `(*p).id` 是同一件事: ```c struct Student a = {1, 90}; struct Student *p = &a; printf("%d\n", p->id); /* 1,等于 (*p).id */ p->score = 95; /* 改的就是 a.score */ ``` 对着记: | | 写法 | | --- | --- | | 变量本身 | `a.id` | | 指针 | `p->id` | 点号给结构体变量用,箭头给**指向结构体的指针**用。不要写成 `p.id`,也不要 `a->id`。 传给函数时,常常传指针:`void show(struct Student *p)`,调用 `show(&a)`。这样不必把整份数据抄进函数,改 `p->score` 也能改外面。
开始练习
动手写
返回结构体
动手写
6 道编程 · 综合运用本阶段知识点
编程题把本阶段知识点串起来用。只看要点不做,认识停在纸面上。
查看本阶段全部编程题
用结构体读写学号成绩
未做
开始写
用结构体求曼哈顿距离
未做
开始写
用结构体判断是否及格
未做
开始写
用 typedef 结构体求两科总分
未做
开始写
用指针给结构体加分
未做
开始写
用函数打印学生信息
未做
开始写
登录
注册
忘记密码
点击此处输入用户名
点击此处输入密码
登录
点击此处输入用户名
点击此处输入密码
点击此处输入邮箱
发送验证码
点击此处输入验证码
点击此处输入邮箱
发送验证码
点击此处输入验证码
点击此处输入新密码