结构体——Linux C编程一站式学习

复合类型与结构体

根据语法规则由基本类型组合而成的类型称为复合类型,例如字符串是由很多字符组成的。【最基本的、不可再分的数据类型称为基本类型,例如整型、浮点型】
结构体就是一种数据类型的组合。如用结构体表示坐标系:
定义标识符:

struct complex
{
	double x,y;
};
//这里complex是一个标识符

定义变量:

struct complex
{
	double x,y;
}z1,z2;
//定义标识符和变量
struct
{
	double x,y
}z1,z2;
//仅定义变量
//这里z1、z2是变量名

只要定义了标识符后面都可以通过标识符来代替类型名,如上面的complex标识符:struct complex z3,z4;
访问复数变量中成员时可用.号访问。

int main()
{
	struct complex
	{
		int x, y;
	}z;
	int x = 3.0;
	z.x = x;
	//x与z.x并不冲突
	z.y = 4.0;
	printf("z=(%d,%d)\n", z.x, z.y);
	return 0;
}

结构体初始化可以用{},如struct z = { 3, 4 };但是赋值时不可以用{}进行赋值。

数据抽象

数据抽象即向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细节。
数据抽象是一种依赖于接口和实现分离的编程(设计)技术。
作用/优点:类的内部受到保护,不会因无意的用户级错误导致对象状态受损。
类实现可能随着时间的推移而发生变化,以便应对不断变化的需求,或者应对那些要求不改变用户级代码的错误报告。

数据类型标志

若结构体同时需要支持多种存储格式,可以在结构体中添加数据类型标识来表示不同的存储格式。
枚举常量就可以作为标识使用,因为枚举常量也是一种整型,其值在编译时确定,因此也可以出现在常量表达式中,可以用于初始化全局变量或者作为case分支的判断条件。

enum coordinate_type { RECTANGULAR,POLAR };
struct complex_struct 
{
	enum coordinate_type t;
	double a, b;
};

嵌套结构体

结构体也是一种递归定义:结构体的成员具有某种数据类型,而结构体本身也是一种数据类型。换句话说,结构体的成员可以是另一个结构体,即结构体可以嵌套定义。

struct segment {
 struct complex_struct start;
 struct complex_struct end;
};

嵌套地初始化:struct segment s = {{ 1.0, 2.0 }, { 4.0, 6.0 }};
平坦地初始化:struct segment s = { 1.0, 2.0 , 4.0, 6.0 };
两种混合:struct segment s = {{ 1.0, 2.0 }, 4.0, 6.0 };

发布了39 篇原创文章 · 获赞 4 · 访问量 1127

猜你喜欢

转载自blog.csdn.net/qq_41403559/article/details/104249522