结构
//结构变量的声明 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编程中的结构体、联合体和枚举都是为了处理不同类型的组合数据而设计的。结构体用于组合不同类型的数据,联合体则让多个不同类型的变量共用同一内存区域,而枚举提供了整数常量的命名机制。了解和...
《C 学习指南 - 语法篇》是一个深入解析C语言语法的重要资源包,适合初学者及有一定基础的程序员进一步巩固C语言基础知识。这个压缩包包含了一份详细的学习指南,主要聚焦于C语言的语法结构,是提升编程技能的宝贵...
ANSI C语法描述文件通常包含了对C语言各种元素的详细解释,如变量声明、函数定义、控制结构、预处理器宏、指针操作等。 `ansic.l` 和 `ansic.y` 是两个与编译器构造相关的文件。在编译器开发中,`lex` (或 `flex`) ...
总之,结构体和联合是C语言中实现复杂数据结构的重要工具,它们可以方便地组织和管理数据,而枚举和typedef则提供了增强代码可读性和可维护性的手段。理解和熟练运用这些概念对于任何C语言程序员来说都是至关重要的...
联合,枚举和位域;预处理;文件操作;综合实例应用。随书所附光盘包含本书配套实例源文件、赠送的C语言学习资料和教学视频。本书适合所有想全面学习C语言的编程人员及C语言爱好者阅读。 章节目录: 第1篇 C语言...
本压缩包文件“c_2.rar_C语言_C语言_课件_c ppt_c语言程序设计课件_课件_DSP”包含了一套完整的C语言程序设计课件,主要针对清华大学的教学内容进行编排,对学习者来说具有很高的实用价值。这些课件以PPT的形式呈现...
对于初学者而言,掌握C语言的基本概念、语法结构以及编程技巧至关重要。本资源集合为“计算机导论课件”,专为大学入门级学习者设计,旨在帮助学生快速掌握C语言的核心知识。 首先,让我们从“c-chap5函数-L.ppt”...
本教程主要介绍了三种用户自定义数据类型:结构型(structure)、联合型(union)和枚举型(enumeration)。 **10.1 结构型** 结构型是C语言中用来组合不同类型数据的一种构造数据类型。它允许我们将不同类型的...
1. C语言参考手册的组织:包括引言、C的基本元素、程序结构、说明和类型、表达式和赋值、语句、函数、C语言语法总结、实现定义的行为。这些部分共同构成了C语言编程的基础和高级特性。 2. 本手册的范围:强调了...
### C语言知识点总结 #### 第1章 C语言程序的基本形式 **1.1 C语言程序的基本结构** C语言程序的基本单元是函数(Function),而一个完整的C程序至少必须包含一个`main()`函数作为程序的入口点。每个函数都有其...
本文将对C语言的基本概念和语法进行总结,包括变量声明、数据类型、运算符、控制结构、函数等。 变量声明 在C语言中,变量声明是使用关键字来声明变量的数据类型和名称。常用的变量声明关键字包括: * auto:声明...
总的来说,这个C语言基础专题培训课程全面地介绍了程序设计的基本概念、C语言的核心语法、流程控制、数据结构和文件操作,旨在培养学生的编程思维和实践技能,为他们后续的编程学习打下坚实的基础。通过深入学习,...
总结起来,C语言中的结构体、联合、枚举以及链表等概念是程序设计中的核心部分,它们帮助我们组织和管理复杂的数据结构,从而实现更高效、更灵活的编程。了解并熟练掌握这些知识点对于深入学习C语言至关重要。
本总结将围绕C语言的基础概念、语法、数据类型、控制结构、函数、数组、指针等方面展开。 ### 1. C语言概述 C语言是由Dennis Ritchie在贝尔实验室开发的,最初用于Unix操作系统。它的设计目标是提供一种既能接近...
三、C语言语法 1. 函数:C语言以函数为基本单位组织代码,每个函数都有特定的任务,通过调用来执行。 2. 控制结构:包括顺序结构、选择结构(if-else、switch)和循环结构(for、while、do-while)。 3. 数组:用于...