(C)关键字const,volatile,struct,union,enum

const:声明只读变量

1.const int * a; == int const *a;

*a(即所指的值)是不可以改变的,a(即所指值的地址)是可以改变的。

 

在编译时会出错,显示(*a)++为只读变量,不可以修改,当将这条语句注释后,会输出其值。 

2.int * const a;(对于此类要先进行初始化)

*a(即所指的值)是可以改变的,a(即所指值的地址)不可以改变。

显示a为只读变量,所以 要在一开始要对a进行初始化,且不能写a++。

3.int const *const a; (要先进行初始化)

a不能修改,*a也不能修改。

volatile:对volatile变量的读写不会被编译器优化掉。

如volatile int i;则编译器不会对i进行优化,多用于硬件方面。 

extern:表明变量或者函数的定义不在本文件中,或者拓展变量的使用范围。

拓展范围:

 其他文件使用:

 下图此时显示file2中a引用失败,因为static表明a只能在file1中使用,file2中只能重新定义。

 

函数也是如此,如果一个函数只能被本文件中其它函数所调用,称为内部函数(或静态函数)。定义时在函数类型前加static。

 struct:多种数据组合起来的一个整体,其表现形式是一个结构体。

struct 结构体名

{

成员表列

}变量名表列;

struct结构体,只是构造出一个新的类型,并没有定义该类型的变量,因此在内存中并没有开辟任何存储空间;

1.1结构体定义(3种方法)

1).先声明结构体类型,再定义结构体变量。

2).在声明的同时定义变量

3).不指定类型名而直接定义结构体类型变量

 

 1.2结构体变量的初始化和引用

 1)在定义结构体变量时初始化

2)结构体变量名.成员名

 3)嵌套定义( 注意date1必须要在stu前面定义)

4)同类结构体可以相互赋值

如下图:一开始c的地址被instant1.cMember,然后instant1的值被赋给instant2(同类的结构体可以相互赋值),此时1和2的指针都指向c,当2的指针修改c的值为b时,instant1.cMember的值也会变成b

 5)字符型数组不能直接赋值(要是用strcpy函数)

 

 1.3 结构体数组的使用

struct 结构体名

{

成员表列

}数组[数组长度];

 1.4结构体指针

1.指向结构体变量的指针: 不能用指向结构体变量的指针指向该结构体变量的某个成员。   

 

 访问结构体变量的三种方法:

注意:

 

 2.字对齐问题

int型变量占四个字节,char占1个字节,后一个变量若能在前一个变量分配的空间中存放下,则后一个变量不再重新分配空间。

字对齐:申请的空间为4的倍数。(结构体存储方式)

 半字对齐:申请的空间为2的倍数

union:当多种类型,多个对象,多个事物只取其一时

通过共用体查看字节序: 

 CPU存取数据都是从低地址开始开始存放,一个变量占用的内存空间往往不止一个字节,但是不同类型的CPU存放数据的顺序不同,因而产生了字节序的概念,按存放顺序的不同分为大端字节序和小端字节序两种:

大端字节序: 数据的高字节位存储在低地址对应的存储单元;

小端字节序:数据的低字节位存放在低地址对应的存储单元。

用共用体查看计算机的字节序:首先union有两个成员,分别为int,char,当int占用时会分配四个字节,而char占用时会分配1个字节,且将int赋值为1便于观察。当计算机为大端字节序时:输出为0,当为小端字节序时,输出为1

 

 enum:枚举类型

 

enum默认初始化是在前一个成员的值上加1,若第一个成员的值没有,默认为0.可作为switch的标签。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值