美文网首页想法简友广场散文
C语言结构、联合和枚举(struct、union、enum)

C语言结构、联合和枚举(struct、union、enum)

作者: Cache_wood | 来源:发表于2020-12-23 00:57 被阅读0次

@[TOC]

结构

结构变量

结构:具有不同数据类型的值(成员)的集合。
联合跟结构很类似,不同在于联合的成员共享同一存储空间。

struct{
    int number;
    char name[NAME_LEN+1];
    int on_hand;
} part1,part2;
//part1,part2都是具有相同结构类型的结构变量

结构成员通过名字而不是位置访问(与数组的区别)

part1.number = 1;
//句点运算符优先级几乎高于所有其他运算符
结构变量的初始化
struct{
    int number;
    char name[NAME_LEN+1];
    int on_hand;
} part1 = {528,"Disk drive",10},
  part2 = {914,"Printer cable",5};

指定初始化:不需要与结构成员的顺序一致

{.number = 528,.name = "Disk drive",.on_hand = 10}

结构的赋值:part2 = part1,直接赋值(与数组不同)

不能用==和!=判断结构是否相等

结构类型
结构标记
struct part{
    int number;
    char name[NAME_LEN+1];
    int on_hand;
};
struct part part1,part2;
//不能漏掉struct,也可以声明在一起
typedef
typedef struct{
    int number;
    char name[NAME_LEN+1];
    int on_hand;
}Part;
Part part1,part2;

命名结构时,两种写法都可以,但是结构用于链表时,必须使用结构标记。

嵌套的数组和结构

结构里面也允许嵌套结构。

结构数组的初始化
struct dialing_code{
    char *country;
    int code;
};
const struct dialing_code country_codes[] = 
{{"China",  86}};
//数组country_codes[]的每一个元素都是一个结构

联合

编译器只为最大的成员分配足够的内存空间

union{
    int i;
    double d;
};

结构变量的成员存储在不同的内存地址中,联合的成员存储在同一内存地址中。


联合和结构的其他性质十分相似。

联合的作用:用联合来节省空间
构造混合的数据结构

每次对联合的成员赋值,都由程序负责改变标记字段的内容

枚举

许多程序中,我们只具有少量有意义的值。
我们为这种具有少量可能值的变量提供了一种专用类型——枚举。

enum = {CLUBS,DIAMONDS,HEARTS,SPADES} s1,s2;

区别:枚举常量的名字必须不同于作用于范围内声明的其他标识符。

枚举常量遵循C语言的作用域规则:如果枚举声明在函数体内,那么它的常量对外部函数来说是不可见的。

枚举标记和typedef
enum suit {CLUBS,DIAMONDS,HEARTS,SPADES};
enum = suit s1,s2;
typedef enum {CLUBS,DIAMONDS,HEARTS,SPADES}Suit;
Suit s1,s2;
枚举作为整数

默认情况下,编译器会把整数0,1,2……赋值给特定枚举中的变量

如果想要指定变量的值,可以在声明时指定。

enum suit {CLUBS=1,DIAMONDS=2,HEARTS=3,SPADES=4};

当没有为枚举常量指定值时,它的值比前面一个值大1.

C语言允许把枚举常量和普通整数混合。

相关文章

网友评论

    本文标题:C语言结构、联合和枚举(struct、union、enum)

    本文链接:https://www.haomeiwen.com/subject/kchrnktx.html