c语言枚举变量作用域,C语言结构、联合和枚举(struct、union、enum)

本文介绍了C语言中的结构体和联合的概念及用法,包括结构体变量的定义、初始化、成员访问,以及联合的特点和用途。同时,还探讨了枚举类型的基本用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@[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语言允许把枚举常量和普通整数混合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值