结构体
来源:互联网 发布:淘宝春装什么时候上新 编辑:程序博客网 时间:2024/05/23 19:12
为什么需要结构体
为了表示一些复杂的事物, 而普通的基本类型无法满足实际需求定义数据类型, 将基本数据类型组合在一起描述一个复杂的事物.
什么叫结构体
把一些基本类型数据组合在一起形成一个新的数据类型(复合数据类型)如何定义结构体(三种方式)
推荐使用第一种// 定义,第一种struct Student {int age;float score;char gender;};// 定义,第二种 (不推荐)struct Student2 {int age;} student2;// 定义,第二种(不推荐)struct {int age;} student3;
怎样使用结构体变量
1, 赋值和初始化1) 声明的同时可以整体赋值
2) 声明完成后, 则只能给每个成员单独赋值
// 声明 Student类型的 变量, 并赋值struct Student st = { 66, 99.1F, 'F' };struct Student st2;// 声明// 赋值st2.age = 10;st2.score = 88.1F; // 注意,不能写成 88F,会报编译错误st2.gender = 'M';
2, 如何取出结构体变量中的每一个成员
1) 结构体变量名.成员名
2) 指针变量->成员名, 或者 (*指针变量).成员名
注意: 指针变量 指向 整个结构体;
而 指针变量->成员,指向的是结构体中的成员
// 取出, 第一种方式printf("age = %d, score = %f, gender = %c \n", st.age, st.score, st.gender);printf("age = %d, score = %f, gender = %c \n", st2.age, st2.score, st2.gender);// 取出, 第二种方式struct Student * pSt;// 存放 Student 类型变量 的地址pSt = &st;// 在计算机内部, pSt->age 会被转换为 (*pSt).ageprintf("age = %d, score = %f \n", pSt->age, pSt->score);printf("age = %d, score = %f \n", (*pSt).age, (*pSt).score);
3, 结构体变量的运算
不能 加减乘除
但可以相互赋值
struct Student st1, st2;
st1.age = 1; st2.age = 2;
st2 = st1;
4, 结构体变量和结构体指针变量作为函数参数传递的问题
推荐使用 地址 来传递
5, 例子
动态构造存放学生信息的结构体数组
6, 链表
通过函数给结构体赋值与打印结构体的所有成员
#include <stdio.h>#include <string.h>/*指针变量:double d = 123.1;// 基本类型变量d占8个字节double * p = &d;// 指针变量p本身 只占四个字节, 即存储内存单元的编号 (32位)p存储d的第一个字节的地址, 通过 double * 类型来确定 指针变量p指向的是d的8个字节.*/struct Student {int age;char gender;char name[100];};// 给结构体变量赋值void intputStudent(struct Student * pSt, int age, char gender, char name[100]) {pSt->age = age;pSt->gender = gender;strcpy( pSt->name, name);// 不能写成 pSt->name = "张三";}// 输出结构体中的所有成员, 发送地址, 可读可写, 有一定的危险性, 但速度快void outputStudent(struct Student * pSt) {printf("age = %d, gender = %c, name = %s \n", pSt->age, pSt->gender, pSt->name);}// 输出结构体中的所有成员, 发送内容, 只可读不可写, 但速度慢且形参耗用额外的内存void outputStudent_2(struct Student stu) {printf("age = %d, gender = %c, name = %s \n", stu.age, stu.gender, stu.name);}int main(void) {struct Student st;intputStudent(&st, 20, 'F', "小娟");// 输入outputStudent(&st);// 输出outputStudent_2(st);return 0;}