`

C语法总结 结构联合枚举

 
阅读更多

 

结构

//结构变量的声明
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编程结构联合枚举PPT学习教案.pptx

    总结一下,嵌入式C编程中的结构体、联合体和枚举都是为了处理不同类型的组合数据而设计的。结构体用于组合不同类型的数据,联合体则让多个不同类型的变量共用同一内存区域,而枚举提供了整数常量的命名机制。了解和...

    C 学习指南 - 语法篇.zip

    《C 学习指南 - 语法篇》是一个深入解析C语言语法的重要资源包,适合初学者及有一定基础的程序员进一步巩固C语言基础知识。这个压缩包包含了一份详细的学习指南,主要聚焦于C语言的语法结构,是提升编程技能的宝贵...

    ansi c语法描述文件

    ANSI C语法描述文件通常包含了对C语言各种元素的详细解释,如变量声明、函数定义、控制结构、预处理器宏、指针操作等。 `ansic.l` 和 `ansic.y` 是两个与编译器构造相关的文件。在编译器开发中,`lex` (或 `flex`) ...

    C 程序设计 第8章 结构和联合(共用体).ppt

    总之,结构体和联合是C语言中实现复杂数据结构的重要工具,它们可以方便地组织和管理数据,而枚举和typedef则提供了增强代码可读性和可维护性的手段。理解和熟练运用这些概念对于任何C语言程序员来说都是至关重要的...

    C语言编程兵书(完整扫描版 )pdf格式 电子书

    联合,枚举和位域;预处理;文件操作;综合实例应用。随书所附光盘包含本书配套实例源文件、赠送的C语言学习资料和教学视频。本书适合所有想全面学习C语言的编程人员及C语言爱好者阅读。 章节目录: 第1篇 C语言...

    c_2.rar_C语言_C语言 课件_c ppt_c语言程序设计课件_课件 dsp

    本压缩包文件“c_2.rar_C语言_C语言_课件_c ppt_c语言程序设计课件_课件_DSP”包含了一套完整的C语言程序设计课件,主要针对清华大学的教学内容进行编排,对学习者来说具有很高的实用价值。这些课件以PPT的形式呈现...

    计算机导论课件,学习C语言

    对于初学者而言,掌握C语言的基本概念、语法结构以及编程技巧至关重要。本资源集合为“计算机导论课件”,专为大学入门级学习者设计,旨在帮助学生快速掌握C语言的核心知识。 首先,让我们从“c-chap5函数-L.ppt”...

    C语言程序设计教程第10章用户自定义数据类型.ppt

    本教程主要介绍了三种用户自定义数据类型:结构型(structure)、联合型(union)和枚举型(enumeration)。 **10.1 结构型** 结构型是C语言中用来组合不同类型数据的一种构造数据类型。它允许我们将不同类型的...

    Microsoft Visual C6.0语言参考手册 (pdf版 带目录)

    1. C语言参考手册的组织:包括引言、C的基本元素、程序结构、说明和类型、表达式和赋值、语句、函数、C语言语法总结、实现定义的行为。这些部分共同构成了C语言编程的基础和高级特性。 2. 本手册的范围:强调了...

    C语言知识点总结

    ### C语言知识点总结 #### 第1章 C语言程序的基本形式 **1.1 C语言程序的基本结构** C语言程序的基本单元是函数(Function),而一个完整的C程序至少必须包含一个`main()`函数作为程序的入口点。每个函数都有其...

    C知识总结_嵌入式-常用知识&面试题库_大厂面试真题.docx

    本文将对C语言的基本概念和语法进行总结,包括变量声明、数据类型、运算符、控制结构、函数等。 变量声明 在C语言中,变量声明是使用关键字来声明变量的数据类型和名称。常用的变量声明关键字包括: * auto:声明...

    《程序设计基础》C语言基础专题培训课件.ppt

    总的来说,这个C语言基础专题培训课程全面地介绍了程序设计的基本概念、C语言的核心语法、流程控制、数据结构和文件操作,旨在培养学生的编程思维和实践技能,为他们后续的编程学习打下坚实的基础。通过深入学习,...

    C语言程序设计教程课件:7_c_stucture.ppt

    总结起来,C语言中的结构体、联合、枚举以及链表等概念是程序设计中的核心部分,它们帮助我们组织和管理复杂的数据结构,从而实现更高效、更灵活的编程。了解并熟练掌握这些知识点对于深入学习C语言至关重要。

    C语言基础总结

    本总结将围绕C语言的基础概念、语法、数据类型、控制结构、函数、数组、指针等方面展开。 ### 1. C语言概述 C语言是由Dennis Ritchie在贝尔实验室开发的,最初用于Unix操作系统。它的设计目标是提供一种既能接近...

    C语言程序设计.zip

    三、C语言语法 1. 函数:C语言以函数为基本单位组织代码,每个函数都有特定的任务,通过调用来执行。 2. 控制结构:包括顺序结构、选择结构(if-else、switch)和循环结构(for、while、do-while)。 3. 数组:用于...

Global site tag (gtag.js) - Google Analytics