结构,联合和枚举

结构

结构的声明格式如下:

struct id{
  char first[10];
  char last[10];
  int age;
};  //别忘了右花括号后面的分号

1.和数组类似的是,结构变量可在定义时初始化,如:

struct id tae = { "aaa", "bbb", 10 };

同样的,这种初始化只能在定义时进行。若在定义之后的地方进行,编译器会报错;但可用匿名结构进行快速赋值,如:

struct id tae;
tae = { "aaa", "bbb", 10 };  //错误
tae = (struct id){ "aaa", "bbb", 10 }; //正确

2.与数组不同的是,结构变量之间可以直接赋值,如:

struct id tae = { "aaa", "bbb", 10 }, sam;
sam = tae;  //可以,本质上是sam的每个成员都被赋成tae对应成员的值

3.结构变量(注意不是结构指针)作为函数参数时,属于值传递

我们需要牢记一点,和数组不同,一个结构变量的名字不是该结构的地址

4.如果需要一个结构来存储字符串,通常应用char数组而非char指针

5.结构的成员变量使用malloc是可行的,但如何正确进行sizeof、memcpy等操作还需要进一步研究

6.伸缩型数组成员

 

联合

联合的声明格式与结构类似,如:

union hold{
  int digit;
  double bigfl;
  char letter;
};

联合与结构的不同在于:联合变量在同一时间只能存储一个值(有点像python中的变量),如

union hold fit;
fit.digit = 23;  //把23存储在fit中
fit.bigfl = 2.0;  //清除23,存储2.0
fit.letter = 'h';  //清除2.0,存储'h'

所以需要注意:结构中,点运算符用来指定成员变量(本质上指向不同内存区域);而联合中,点运算符是用来表示正在使用哪种数据类型(指向同一片内存)

编译器为联合变量分配足够的空间以保存可能的最大需要

 

枚举

枚举的声明格式如下:

enum spec{ red, green, blue, yellow, grey };

枚举创建一个新类型并指定它可以具有的值(实际上不限制)

1.枚举类型的目的是提高程序可读性

2.枚举列表中的元素(称为枚举常量)本质上是int常量,因此可用于设置数组大小或switch标签。上述enum spec的定义相当于:

#define red 0
#define green 1
......
#define grey 4

3.枚举常量默认从0开始递增,也可以手动设置,如:

enum spec color = red;
printf("%d\n", color);  //打印0
color = yellow;
printf("%d\n", color);  //打印3
enum another_spec { low = 100, mid = 500, high = 2000 };  //可以


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值