C语言 struct结构体超详细讲解

C语言 struct 结构体超详细讲解

什么是C语言结构体?

C语言中的结构体是一种自定义数据类型,可以将多个不同数据类型的变量打包成一个整体,方便程序中的数据组织和管理。

结构体的语法如下:

struct 结构体名 {
    数据类型1 变量名1;
    数据类型2 变量名2;
    ...
    数据类型n 变量名n;
};

其中,结构体名是自定义的名称,可以根据需要进行修改。数据类型可以是基本数据类型、数组、指针、其他结构体等。变量名是结构体内部的成员变量,用于存储数据。

如何定义和使用结构体变量?

我们可以根据定义的结构体来创建结构体变量,示例代码如下:

struct Student {
    char name[20];
    int age;
    float score;
};

int main() {
    // 创建结构体变量
    struct Student stu1;

    // 初始化结构体变量
    strcpy(stu1.name, "张三");
    stu1.age = 18;
    stu1.score = 88.5;

    // 使用结构体变量
    printf("姓名:%s,年龄:%d,分数:%f", stu1.name, stu1.age, stu1.score);

    return 0;
}

在上面的示例代码中,我们定义了一个结构体 Student,包含了一个字符数组 name,一个整型变量 age,和一个浮点数 score。通过创建结构体变量 stu1,并分别赋值给结构体成员变量,我们可以在程序中使用这个结构体变量,并通过成员访问符“.”来访问结构体成员。

结构体的嵌套和指针访问

结构体可以嵌套定义和使用,同时也可以通过指针访问结构体成员。示例代码如下:

struct Address {
    char city[20];
    char street[20];
};

struct People {
    char name[20];
    int age;
    struct Address addr; // 嵌套结构体
};

int main() {
    // 创建结构体变量并初始化
    struct People p1 = {"张三", 18, {"广州", "天河路"}};

    // 访问嵌套的结构体成员
    printf("姓名:%s,年龄:%d,城市:%s,街道:%s", p1.name, p1.age, p1.addr.city, p1.addr.street);

    // 创建指向结构体变量的指针
    struct People *pp = &p1;

    // 通过指针访问结构体成员
    printf("姓名:%s,年龄:%d,城市:%s,街道:%s", pp->name, pp->age, pp->addr.city, pp->addr.street);

    return 0;
}

在上述示例代码中,我们定义了一个结构体 Address,包含了城市和街道两个成员变量。然后我们再定义了一个结构体 People,包含了姓名、年龄、以及一个地址结构体作为成员变量。通过嵌套结构体的方式,我们可以实现更复杂的数据结构。

同时,我们还定义了一个指向结构体变量的指针 pp,通过指针访问结构体成员使用的是“->”运算符。

结构体的数组和动态内存分配

和其他自定义数据类型一样,结构体也可以作为数组的元素来使用。同时,我们还可以通过动态内存分配的方式,动态地创建结构体对象。示例代码如下:

// 定义一个包含年、月、日成员的结构体
struct Date {
    int year;
    int month;
    int day;
};

int main() {
    struct Date dates[3] = {
        {2020, 1, 1},
        {2020, 2, 14},
        {2021, 5, 1}
    };

    // 创建指向结构体变量的指针
    struct Date *pdate = (struct Date*) malloc(sizeof(struct Date));

    // 动态分配内存,初始化结构体变量
    pdate->year = 2022;
    pdate->month = 1;
    pdate->day = 1;

    // 使用结构体数组和指针
    for (int i = 0; i < 3; i++) {
        printf("日期:%d-%d-%d\n", dates[i].year, dates[i].month, dates[i].day);
    }

    printf("日期:%d-%d-%d\n", pdate->year, pdate->month, pdate->day);

    // 释放动态分配的内存
    free(pdate);

    return 0;
}

在上述示例代码中,我们定义了一个结构体 Date,包含了年、月、日三个成员变量。然后我们创建了一个结构体数组 dates,包含了三个日期对象。接着,我们又动态地创建了一个结构体对象 pdate,并且释放了动态分配的内存。

总结

结构体是C语言中重要的自定义数据类型,可以方便地打包多个数据,形成一个整体。通过嵌套、数组和指针等操作,我们可以更灵活地使用和管理结构体。在实际的编程过程中,掌握好结构体的使用,可以大大提高程序的可读性和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 struct结构体超详细讲解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言简明分析选择结构和循环结构的使用

    C语言简明分析选择结构和循环结构的使用 选择结构的使用 在 C 语言中,选择结构(if-else)用来在程序中根据不同的条件来执行不同的代码。其基本语法格式如下: if (表达式) { 代码块1; } else { 代码块2; } 其中,表达式是一个布尔表达式,如果它的值为真(非0),则将执行代码块1;否则,将执行代码块2。 示例1:判断一个数的正负性 #i…

    C 2023年5月23日
    00
  • 详解vs2022创建及调用.lib的方法

    下面是详解vs2022创建及调用.lib的方法。 1. 创建.lib文件 1.1 在Visual Studio 2022中创建新项目 打开Visual Studio 2022,点击“文件”菜单,选择“新建”和“项目”。 在“新建项目”窗口中,选择“Visual C++” -> “Windows桌面” -> “空项目”。然后为项目命名,例如“Dem…

    C 2023年5月23日
    00
  • C程序 查找矩阵定数

    C程序 查找矩阵定数完整使用攻略 介绍 这个程序可以在一个已知的矩阵中查找某个固定的数字。具体的实现方法是通过循环遍历矩阵中的每个元素,并将每个元素和固定数字进行比较,直到找到匹配的元素或遍历完整个矩阵。 用法 1.首先,在你的环境中下载并安装C编译器工具,例如GCC或者CLang。 2.下载本程序的源代码,打开命令行工具,并用C编译器来编译程序。 gcc …

    C 2023年5月9日
    00
  • Node.js API详解之 net模块实例分析

    首先,我们需要了解什么是Node.js的API。API全称是Application Programming Interface,它是软件系统不同组件之间的交互接口。Node.js提供了一个强大的API库,包括了许多内置的模块,来支持应用程序的开发与部署。其中net是Node.js提供的一个核心模块,它提供了一个异步的网络接口,用于创建TCP和UNIX客户端/…

    C 2023年5月23日
    00
  • C语言写一个散列表

    C语言写一个散列表的完整攻略 什么是散列表? 散列表是一种数据结构,它将键映射到值。通过使用散列函数,散列表可以快速查找数据。散列表可以用于实现字典、哈希表、集合等数据结构。 散列表的实现 散列表的实现可以分为以下几步: 定义散列表的结构体以及散列表元素的结构体; 实现散列函数; 实现插入元素方法; 实现查找元素方法; 实现删除元素方法; 实现销毁散列表方法…

    C 2023年5月23日
    00
  • Python 分形算法代码详解

    Python 分形算法代码详解 什么是分形算法 分形算法是一种用来生成自相似图形的算法,自相似指的是该图形中每一部分都与整体相似。这种图形在数学和自然界中都有广泛的应用。 Python 分形算法框架 使用 Python 生成分形图形的基本框架如下: 初始化画布 定义绘制分形的递归函数,该函数需要接收不同的参数,以便在每个级别上画出不同的形状,同时包括停止递归…

    C 2023年5月22日
    00
  • 基于C语言实现简单学生成绩管理系统

    基于C语言实现简单学生成绩管理系统攻略 1. 设计思路 学生成绩管理系统可以分为以下几个模块: 学生信息模块:包括学生信息的存储、读取和显示功能; 成绩信息模块:包括成绩的录入、修改和查询功能; 统计信息模块:包括成绩排名和平均成绩计算功能。 2. 模块设计与实现 2.1 学生信息模块 学生信息存储采用文件存储,每个学生对应一个文件。其中文件名是学生的学号,…

    C 2023年5月23日
    00
  • 一文详解C++中动态内存管理

    一文详解C++中动态内存管理 什么是动态内存 在C++中,内存是分为静态和动态两种。静态内存是在程序编译时就已经分配好的,而动态内存指的则是在程序运行时动态分配的内存。 动态内存管理在C++编程中非常重要,我们通常使用new和delete关键字进行动态内存的分配和释放。这种方式相比静态内存分配,可以更灵活地控制内存的使用情况。 动态内存分配 在C++中,动态…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部