当前位置 博文首页 > IT_Quanwudi的博客:自定义数据类型(结构体)

    IT_Quanwudi的博客:自定义数据类型(结构体)

    作者:[db:作者] 时间:2021-08-07 13:02

    自定义数据类型(结构体)

    //struct + 结构体名称

    例如:

    struct Student

    {

    char name[20];

    int age;

    //struct Student*p;可以定义一个包含自身的指针

    //struct Student h;//error ?不可以定义一个包含自身的指针

    }

    //自定义数据类型,定义完成后,其和内置类型一样使用。

    //比如和 int a; int arr[10]; int *p; char *p; 一样使用

    //因为聚合类型中未初始化的为0;所以age未初始化给值时默认值为0

    ?

    我们现在定义一个 名字为“张飞”,年龄为21岁的Student stu1;

    struct?Student?stu1={"zhangfei",21};

    现在我们突然发现名字和年龄登记错了,其实是“关羽”,年龄为32岁。

    我们怎么访问到结构体变量中呢:

    ?

    ******结构体中普通变量可以通过 ”?. ”?来访问它的成员******

    struct?Student?stu1={"zhangfei",21};

    stu1.age=32//访问stu1的age成员并将其改为32

    因为名字是字符串,所以我们得用strcpy库函数来拷贝

    strcpy(stu1.name,"guanyu");

    ?

    ?

    ******结构体中指针变量可以通过 ”?-> ”?来访问它的成员******

    struct?Student?*stu1={"zhangfei",21};

    stu1->age=32;

    修改名字和上面一样,得用strcpy库函数来拷贝

    strcpy(stu1->name,"guanyu");

    //因为在C语言中,自带解引用的符号有两个,“[]”和“->”。

    //所以 ??stu1 -> name = (*stu1) . name

    ?

    ?

    ?

    //输出时,我们有3种方法,一种直接printf,一种用参数列表为普通变量的Show输出函数,一种用参数列表为指针变量的Show输出函数,我们比较一下优略。

    ①:

    我们直接用printf输出一下“张飞”,21岁看看:

    ??

    我们将名字改成“关羽”,年龄改成32岁:

    改岁数容易想到 stu1.age=36;

    而改名字得用到拷贝函数strcpy了,而不是stu1.name=”guanyu”;//整体赋值只有一次机会

    我们输出看看:

    ?

    ?

    ②:

    这时候,我们改试着用参数列表为普通变量的Show输出函数内修改,且主函数再输出一遍,看看修改成功了没:

    ?

    ?

    ?

    你会发现,子函数修改好后不会影响到主函数。

    ?

    ③:

    现在我们试着用参数列表为指针变量的Show输出函数内修改,且主函数再输出一遍,看看修改成功了没:

    ?

    ?

    ?

    我们会发现,子函数修改好后会影响到主函数,将主函数也修改。

    ?

    综合来看,我们平时输出结构体时,最好直接printf输出或者用参数为指针的输出函数。

    cs