结构体

来源:互联网 发布:淘宝春装什么时候上新 编辑:程序博客网 时间: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;}