结构体和联合体

C语言中,最基本不能再分的数据类型称为基本类型,由基本类型组合成的数据类型称为复合类型,比如数组、字符串、结构体等。这篇笔记我们主要学习struct结构体数据类型,此外也介绍枚举和联合体。

struct 结构体类型

结构体可以理解为在基本数据类型上进一步的抽象封装,结构体定义和声明结构体的写法例子如下。

struct complex_struct
{
    double x, y;
};
struct complex_struct z;

使用struct例子。

#include <stdio.h>

struct complex_struct
{
    double x, y;
};

int main(void)
{
    struct complex_struct z;
    z.x = 3.0;
    z.y = 4.0;
    printf("z [%f, %f]\n", z.x, z.y);
    return 0;
}

结构体变量也可以声明时直接初始化,下面是一个例子。

struct complex_struct z = { 3.0, 4.0 };

同全局变量的规则一样,如果结构体变量是全局变量,也只能用常量表达式初始化。除此之外,结构体变量之间可以进行赋值操作,结构体也可以嵌套。

enum 枚举类型

枚举类型主要用作一种标志,枚举值实际是整型,值可以由编译器自动分配,一般是从0开始的整数,也可以手动指定。枚举使用例子如下。

#include <stdio.h>

enum job
{
    DRIVER, TEACHER
};

struct person
{
    enum job j;
    char *name;
    int age;
};

int main(void)
{
    struct person p1;
    p1.j = DRIVER;
    p1.name = "Tom";
    p1.age = 10;
    return 0;
}

union 联合体类型

联合体是一种特殊的数据类型,它允许在同一内存空间中存储不同类型的数据,但注意在任意时刻只能使用其中一个成员,此外联合体的大小为其最大成员的大小。下面是使用联合体的例子代码。

#include <stdio.h>

union number
{
    int i;
    double d;
};

int main(void)
{
    union number a = {1};
    union number b;
    b.d = 2.0;
    printf("%zu\n", sizeof a);
    printf("%zu\n", sizeof b);
    return 0;
}
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap