C语言中,最基本不能再分的数据类型称为基本类型,由基本类型组合成的数据类型称为复合类型,比如数组、字符串、结构体等。这篇笔记我们主要学习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 };
同全局变量的规则一样,如果结构体变量是全局变量,也只能用常量表达式初始化。除此之外,结构体变量之间可以进行赋值操作,结构体也可以嵌套。
枚举类型主要用作一种标志,枚举值实际是整型,值可以由编译器自动分配,一般是从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;
}
联合体是一种特殊的数据类型,它允许在同一内存空间中存储不同类型的数据,但注意在任意时刻只能使用其中一个成员,此外联合体的大小为其最大成员的大小。下面是使用联合体的例子代码。
#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;
}