时思美 发表于 2025-9-9 22:56:10

准备工作之结构体[基于郝斌课程]

为什么会出现结构体  为了表示一些复杂的数据,而普通的基本类型变量无法满足要求 什么叫结构体  结构体是用户根据实际需要自己定义的复合数据类型 如何使用结构体普通结构体变量.成员变量/*
@file      main.c
@brief   数据结构预备知识之结构体学习
@author    EricsT (EricsT@163.com)
@version   v1.0.0
@date      2025-09-09
@history   2025-09-09 EricsT - 新建文件
*/

#include <stdio.h>
#include <string.h>

struct Student//定义一个数据类型
{
        int sid;//结构体成员
        char name;
        int age;
};//该处分号不能省略

int main(void)
{
        Student st = { 1000, "zhangsan", 20 };//结构体变量
        printf("%d %s %d\n", st.sid, st.name, st.age);

        st.sid = 99;
        strcpy(st.name, "lisi");//st.name = "lisi"
        st.age = 22;
        printf("%d %s %d\n", st.sid, st.name, st.age);

        return 0;
}结构体指针变量->成员变量/*
@file      main.c
@brief   数据结构预备知识之结构体指针
@author    EricsT (EricsT@163.com)
@version   v1.0.0
@date      2025-09-09
@history   2025-09-09 EricsT - 新建文件
*/

#include <stdio.h>

struct Student//定义一个数据类型
{
        int sid;//结构体成员
        char name;
        int age;
};//该处分号不能省略

int main(void)
{
        Student st = { 1000, "zhangsan", 20 };//结构体变量

        Student* pst;//结构体指针
        pst = &st;

        pst->sid = 99;//pst->sid等价于(*pst).sid等价于st.sid

        return 0;
}pst->sid[表示pst所指向的结构体变量中的sid这个成员] 注意事项结构体变量不能加减乘除,但是可以相互赋值普通结构体变量和结构体指针变量作为函数传参的问题/*
@file      main.c
@brief   数据结构预备知识之结构体与函数
@author    EricsT (EricsT@163.com)
@version   v1.0.0
@date      2025-09-09
@history   2025-09-09 EricsT - 新建文件
*/

#include <stdio.h>
#include <string.h>

struct Student//定义一个数据类型
{
        int sid;//结构体成员
        char name;
        int age;
};//该处分号不能省略


void f(Student* pst)
{
        (*pst).sid = 99;

        strcpy(pst->name, "zhangsan");

        pst->age = 20;
}

//此时传数据,会把st整体传进来,意味着需要传Student大小过去
//耗时耗内存
void g(Student st)
{
        printf("%d %s %d\n", st.age, st.name, st.sid);
}

//此时只传递了4个字节,但是可以访问整个结构体
void h(Student* pst)
{
        printf("%d %s %d\n", pst->age, pst->name, pst->sid);

}

int main()
{
        Student st;//此时已在内存中给其分配内存空间,由于未初始化,所以该块内存中的值是随机值

        f(&st);
        g(st);
        h(&st);

        return 0;


来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

打阗渖 发表于 2025-10-14 03:42:51

懂技术并乐意极积无私分享的人越来越少。珍惜

揭荸 发表于 2025-11-11 07:59:51

感谢分享
页: [1]
查看完整版本: 准备工作之结构体[基于郝斌课程]