C语言强化-第六章
第六章-结构体
- 用结构体声明一个点的坐标,也是最简单的结构体声明过程
其中,struct引入结构声明,point为结构标记(可选),x,y为成员。struct point { int x; int y; }
- struct定义了一种结构类型。在标志结构成员表结束的右花括号之后可以跟一个变量表,这与其他基本变量的声明是相同的。例如
同时,为了方便,可以用结构标记来代替花括号中的内容。例如struct {……} xlable,ylable;
struct point xlable,ylable;
- 通过赋值初始化:
struct point maxpt = {300,200};
- 可以通过
结构名.成员
来访问某个特定结构中的成员。 - 结构可以嵌套。
- 对结构的合法操作有
- 作为一个整体赋值和复制
- 取地址
- 访问成员
- 建立一个struct类型的函数
struct point makepoint(int x,int y) { struct point temp; temp x = x; temp y = y; return temp; }//返回一个point类型的结构体。
- 结构体指针类似于一个普通变量指针。声明
将pp定义为一个指向struct point类型的指针。如果pp指向一个point结构,那么pp及为该结构,而(pp).x和(*pp).y则是结构成员。因为struct point *pp
.
的优先级比*
要高,故要加括号。
结构指针的使用频率非常高,因此C语言为了方便使用,定义了另外一种表达方式
假定p是一个指向结构的指针,可以用
p->结构成员
这种形式引用结构成员。
这两句的意思是相等的。printf("origin is (%d,%d)\n",(*pp).x,(*pp).y); printf("origin is (%d,%d)\n",pp->x,pp-y);
- 结构数组
声明了一个结构类型key,并定义了该类型的结构数组keytab,同时为其分配结构空间。数组keytab的每一个元素都是一个结构。struct key{ char *word; int count; } keytab[NKEYS];
初始化:struct key{ char *word; int count; }keytab[] = { "auto", 0, "break", 0, ...... "while", 0, };
- typedef
用法
type 类型名 自定义名
typedef结构体:
定义了一个treenod类型的数据。typedef struct tnode{ char *word; int count; Treeptr left; Treeptr right; } Treenod;
PS
结构作为参数的优点:
(1) 编程风格更加的直接、清晰。
(2) 由于其改变的是副本,所以比处理原始数据相比更加的安全。
结构体指针作为参数的优点:
(1) 只需要传递一个单个地址即可;
(2)处理数据更加的方便,效率较高。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步