五、Linux——结构体

这篇博客详细介绍了Linux中结构体的概念和使用,包括结构体的定义、成员访问、初始化、无名结构体、结构体嵌套、结构体数组、结构体指针、共用体以及typedef的运用。通过多个示例源码,帮助读者掌握结构体在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【1】结构体

        struct 结构体类型名 {
            数据类型     成员名1;
            数据类型     成员名2;
            ...
            数据类型     成员名n;
        }s1;

        struct stu s2;

【2】访问成员

        变量名.成员名

【3】初始化

        struct  结构体名  变量名={初始数据表};

        struct 结构体名
        {
                成员列表;
        }变量名 = {初始数据表};

【4】无名结构体

        1--- 没有结构体类型名
        2--- 不可以定义局部变量

【5】结构体嵌套

        1--- 成员所属的数据结构类型是结构体类型
        2--- 内部的结构体通常定义为无名结构体

【6】结构体数组

        struct stu s[5];
        本质是数组,元素是结构体类型

【7】 结构体指针

        struct stu
        {
            int id;
        }s1;
        struct stu *p;
        p = &s1;

【8】共用体

        不同数据类型的数据可以使用共同的存储区域,这种数据构造类型成为共用体,简称共用,又称联合体。
        union 共用体名
        {
            成员列表;
        };  

        测试共用体的大小,以最大的成员所占的空间为准。 

【9】typedef

        用于给已存在的类型名,进行重命名。

源码及注释

1、1_struct.c

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

#define N 32
struct stu           //struct:关键字
                     //stu:类型名
                     //id:成员名
                     //s1:变量名
{
    int id;
    float score;
    char name[N];
}s1;                //结构体是类型,s1是变量名字,s1全局
int main(int argc, const char *argv[])
{
    struct stu s2;     //s2局部变量,如果声明结构体的时候没有
                       //stu,则不能通过这种方式定义。

    s1.id = 1;
    s1.score = 972;
    strcpy(s1.name,"saber");  //不能name[N] = "saber",只能出现在初始化

    printf("id = %d\n",s1.id);
    printf("sc = %.2f\n",s1.score);
    printf("na = %s\n",s1.name);


    s2.id = 8;
    s2.score = 666;
    strcpy(s2.name,"evil");  //不能name[N] = "saber",只能出现在初始化

    printf("id = %d\n",s2.id);
    printf("sc = %.2f\n",s2.score);
    printf("na = %s\n",s2.name);
    return 0;
}

2、2_struct_init.c

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


#define N 32

struct stu{             
### Linux C 结构体中 `uint8_t` 和 `uint32_t` 类型的应用 在Linux环境下使用C语言编写程序时,`uint8_t`和`uint32_t`是非常常见的固定宽度整数类型。这两种类型的定义确保了跨平台的一致性和可靠性。 #### 定义与特性 - **`uint8_t`**: 表示无符号的8位整数,在大多数平台上相当于`unsigned char`。这种类型常用于处理单个字节的数据[^1]。 - **`uint32_t`**: 是一种无符号的32位整数数据类型,适用于需要精确表示较大范围数值而不含负值的情形。此类型通常对应于`unsigned int`或更具体的实现细节取决于编译环境。 #### 使用场景举例 为了更好地理解如何在实际项目里运用这两个类型,下面给出一段简单的代码片段展示了一个包含上述两种成员变量的结构体: ```c #include <stdint.h> #include <stdio.h> // Define a structure that uses both uint8_t and uint32_t types. typedef struct { uint8_t flag; // A single byte to store flags or status information. uint32_t counter; // An unsigned 32-bit integer used as a count value. } ExampleStruct; int main() { // Initialize an instance of the defined structure. ExampleStruct example = {0}; // Assign values to each field within the structure. example.flag = 0xFF; example.counter = 4294967295U; // Maximum possible value for uint32_t. printf("Flag Value: %u\n", (unsigned int)example.flag); printf("Counter Value: %lu\n", (long unsigned int)example.counter); return 0; } ``` 这段代码展示了怎样声明并初始化一个含有`uint8_t`和`uint32_t`字段的结构体实例,并对其赋值以及打印出来验证其正确性。 通过这种方式定义结构体不仅提高了代码可读性,还增强了移植性——即无论目标硬件架构是什么样的,只要遵循POSIX标准,就能保证相同的行为表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值