结构
//结构变量的声明 struct { int number; char name[NAME_LEN+1]; int on_hand; } part1, part2; //初始化 struct { int number; char name[NAME_LEN+1]; int on_hand; } part1 = { 528, "Disk driver", 10 }; part2 = { 914, "Printer cable", 5}; //C99的指定初始化,对于上面的结构变量声明初始化可以改为 {.number = 528, .name = "Disk Driver", .on_hand = 10 }; //将 点号 和 成员名的组合称为指示符,指定初始化式有几个优点 //1.易读且易验证 //2.初始化式中的值的顺序不需要与结构中成员的顺序一致 //对结构的操作 part1.number = 258; part1.on_hand = 10; part2 = part1; //指针操作 struct node *ptr; (*ptr).name = "Disk driver"; ptr->name = "Disk driver"; //结构标记的声明,注意最后必须以分号结尾 struct part { int number; char name[NAME_LEN+1]; int on_hand; }; struct part part1; struct part part2; //结构声明和 结构变量声明可以写在一起 struct part { int number; char name[NAME_LEN+1]; int on_hand; } part1, part2; //结构类型定义,使用typedef来定义真实的类型名 typedef struct { int number; char name[NAME_LEN+1]; int on_hand; } Part; Part part1, part2; //因为Part是typedef的名字,所以不允许写成struct Part; //C99中的复合字面量 //嵌套结构 struct person_name { char first[FIRST_NAME_LEN+1]; char middle_initial; char last[LAST_NAME_LEN+1]; }; //可以用person_name作为更大结构的一部分 struct student { struct person_name name; int id; int age; char sex; }; student1, student2; //结构数组 struct part inventory[100]; inventory[i].number = 883; //结构数组初始化,存储国家和长途电话的地区码 struct dialing_code { char *country; int code; }; const struct dialing_code country_codes[] = { {"Argentina", 54}, {"Korea", 82}, {"China", 86} };
联合
union { int i; double e; }; //联合的声明方式非常类似于结构的声明,但是联合中int和double是存储在同一内存 //地址中的,联合可以节省空间 union un{ int i; double e; } u1, u2; typedef union { int i; double e; } un; //sizeof(u1) 或者 sizeof(un)的结构都是8字节,因为按照最大的存储单元来算 //double 是8个字节,所以这个联合体是8个字节 //用联合来构造混合的数据结构 typedef union { int i; double d; } Number; Number number_array[100]; number_array[0].i = 5; number_array[2].d = 3.14;
枚举
//枚举类型(enumeration type)是一种由程序员列出"枚举"的类型,而且必须为 //每个值命名枚举常量,这里用来定义扑克牌的四种花色 enum { CLUBS, DIAMONDS, HEARTS, SPADES } s1, s2; //枚举的声明方式跟结构联合类似 enum suit { CLUBS, DIAMONDS, HEARTS, SPADES }; enum suit s1, s2; typedef enum { CLUBS, DIAMONDS, HEARTS, SPADES } Suit; Suit s1, s2; //还可以创建bool类型,不过C99中自带了这种类型可以不用创建了 typedef eunm {FALSE, TRUE} Bool; //枚举中默认给每个变量分配0,1,2。。。。 这样的整数,还可以指定这些数 enum suit { CLUBS =1 , DIAMONDS = 2, HEARTS = 3, SPADES = 4 }; //也可以是任意整数,不用按照特定的顺序 enum dept { RESEARCH = 20, PRODUCTION = 10, SALES = 25 }; //没有为枚举指定值时,它的值通常比前一个值大1,这里的BLACK为0, //DK_GRAY为8 enum EGA_colors{BLACK, LT_GRAY=7, DK_GRAY, WHITE=15}; //枚举变量s ,可以对其进行s++操作 //虽然把枚举的值作为整数使用非常方便,但是把整数用作枚举的值却是非常危险 //的,我们可能不小心把4存储到s中,而4不能跟任何花色相对应 //用枚举生命"标记字段" typedef struct { enum { INT_KIND, DOULBE_KIND} kind; union { int i; double d; } u; } Number;
对于结构进行sizeof操作
struct { char a; int b; }s;
如果char占1个字节,int占4个字节结构应该是5个字节,但是有些计算机要求特定数据项的地址是某个字节
数(一般是2字节,4字节,8字节)的倍数。为了满足这一要求,编译器会在邻近的成员之间留“空洞”,从而使结构的成员对其,如果假设数据项必须从4个字节的倍数开始,那么对上面的结构进行sizeof操作结构应该是
8个字节。
struct { int a; char c; } s;
对于上面的结构来说,可能会出现尾部的“空洞”
C语言早期没有typedef,所以标记是结构类型命名的唯一有效方式,就像下面这种声明,但假如typedef时已经晚了,标记已存在了无法删除了
struct par{ int number; char name[NAME_LEN+1]; };
而当结构成员是指向同类型结构的指针时,标记仍然是非常有必要的,如
struct node{ int value; struct node *next; };
相关推荐
数据结构与算法_C语言 01.swap.mp4 02.BubbleSort.mp4 03.SelecttionSort.mp4 04.顺序查找.mp4 05.C_DS_折半查找.mp4 06.递归.mp4 07递归算法_折半查找.mp4 08.Permutations.mp4 09.插入排序.mp4 10.快速...
联合,枚举和位域;预处理;文件操作;综合实例应用。随书所附光盘包含本书配套实例源文件、赠送的C语言学习资料和教学视频。本书适合所有想全面学习C语言的编程人员及C语言爱好者阅读。 章节目录: 第1篇 C语言...
通过本课程的学习,学生应能掌握C语言的语法、语义规则、语言的数据类型及程序结构。能运用结构程序设计的思想,进行正确地阅读、分析程序和设计编制程序,具有程序设计的能力。 二、教学基本要求 1.理论教学 ...
《c语言教程(原书第4版)》是一本优秀的c程序设计语言教材,完整描述了ansi c语言及其语法特性,并对c语言的高级特性和应用作了深入阐述,介绍了从c到c++和java过渡的相关知识。《c语言教程(原书第4版)》的一个...
面向对象编程和可视化集成开发工具的发展,使很多曾经非常流行的编程语言影响下降甚至逐步消失,但有一种语言是例外,它就是C语言,时光流逝丝毫没减低C的魅力,它的风采依然如旧。 C语言已经深深的进入各种操作...
C程序设计语言C语言精典版本 目 录 译者序 序 第1版序 前言 第1章 基本概念 1.1 入门 1.2 变量与算术表达式 1.3 for语句 1.4 符号常量 1.5 字符输入输出 1.5.1 文件复制 1.5.2 字符计数 1.5.3 行计数 1.5.4...
C语言已经深深的进入各种操作系统,通过对C语言的学习,能够很快的掌握操作系统的底层结构和操作方式,因此C语言是学习编程的首选语言。为满足广大读者的要求,本期专题特别推出C语言初级教程。 第一讲 慨述 ...
“本书清晰地阐明了Kernighan与Ritchie的The C Programming Language一书中许多简略的地方,而且精彩地总结了C语言编程实践,强烈推荐!” ——Yechiel M.Kimchi,以色列理工学院 目录: 第1章 声明和...
第2章 结构、联合和枚举 21 结构声明 21 2.1 struct x1{...};和typedef struct{...}x2; 有什么不同? 21 2.2 这样的代码为什么不对?struct x {...}; x thestruct; 22 2.3 结构可以包含指向自己的指针吗? 22 ...
IvorHorton还著有关于C、C++和Java的多部入门级好书,如《C语言入门经典(第4版)》和《C++入门经典(第3版)》。 译者 杨浩,知名译者,大学讲师,从事机械和计算机方面的教学和研究多年,发表论文数篇,参编和翻译的...
《你必须知道的495个C语言问题》结构清晰,讲解透彻,是各高校相关专业C语言课程很好的教学参考书,也是各层次C程序员的优秀实践指南。 -----------------------------------------------------------------------...
结构、联合和枚举 o 3.1 声明 struct x1 { ...}; 和 typedef struct { ...} x2; 有什么不同? o 3.2 为什么 struct x { ...}; x thestruct; 不对? o 3.3 一个结构可以包含指向自己的指针吗? o 3.4 在 C 语言...
2 结构、联合和枚举7 2.1 声明struct x1 f . . . g; 和typedef struct f . . . g x2; 有什么不同? . 7 2.2 为什么struct x f . . . g; x thestruct; 不对? . . . . . . . . . . . . . 7 2.3 一个结构可以包含指向...
第8章 嵌入式linux c语言基础——arm linux内核常见数据结构 225 8.1 链表 226 8.1.1 链表概述 226 8.1.2 单向链表 226 8.1.3 双向链表 233 8.1.4 循环链表 234 8.1.5 arm linux中链表使用实例 ...