几个常见的修饰变量的关键字

const修饰普通变量

//const修饰data为只读变量,data的本质是变量
//只读变量只能被初始化,不能被赋值
const int data=100;
data=10;//err

如果以常量初始化const修饰的只读变量,那么只读变量的值事先存放在“符号常量表中”不会立即给data开辟空间

当对data取地址时,系统才会为data开辟空间

const int data=100;
int *p=(int *)&data;
*p=2000;
cout<<"*p="<<*p<<endl;//2000
cout<<"data="<<data<<endl;//100

data事先保存在符号常量表中,当对data取地址时,才为data开辟了空间,接着修改了data所指向的地址空间的值为2000,所以当取data的值时,还是会从符号常量表中取data的值100,而data开辟的空间的值已经变成了2000。

如果以变量初始化const修饰的只读变量,那么只读变量会立即开辟空间(没有符号常量表)

int a=10;
const int data=a;//以变量初始化data
int *p=(int *)&data;
*p=2000;
cout<<"*p="<<*p<<endl;//2000
cout<<"data="<<data<<endl;//2000

const修饰自定义类型的变量立即开辟空间(没有符号常量表)

register修饰寄存器变量

如果变量特别高频繁使用,会自动将变量存储在寄存器中,目的时提高访问效率

如果用户想将变量直接放入寄存器中可以加register修饰

register int data=0;//data将放入寄存器中
//尽量不要对寄存器变量取地址
&data;
//register修饰的变量,只是尽量放入到寄存器中

volatile关键字

强制访问内存,从内存中读取数据而不是寄存器或是其它地方

volatile int data=0;//对data的访问必须从内存访问

防止编译器优化

sizeof测量类型的大小

cout<<sizeof('a')<<endl;//1B
cout<<sizeof(10)<<endl;//4B
cout<<sizeof(short)<<endl;//2B
cout<<sizeof(long)<<endl;//32位平台 4B
cout<<sizeof(float)<<endl;//4B
cout<<sizeof(double)<<endl;//8B

typedef给已有的类型重新取个别名

不能创建新类型,只是将长且复杂的类型名取一个短小的名称。

步骤:

  1. 先用已有的类型定义一个普通的变量
  2. 用别名替换变量名
  3. 在真个表达式最前方加typedef
//INT32就是int类型的别名
typedef int INT32;
INT32 data;
int num;//已有的类型仍然有效

例1:给int arr[5]取个别名

typedef int MYARRAY[5];
MYARRAY arr;

例2:给int *取个别名

typedef int *MYP;
MYP p;//int *p;p的类型就是int *类型

转义字符

'\0' == ASCII 为0

'\n' == 换行符

'\t' == tab缩进符

'\r' ==回到行首符号

'\a' ==发出警报

八进制转义:\ddd' 每个d的范围必须是0~7 3个d表示最多识别3位八进制数据,如'\123'

十六进制转义:'\xhh' 每个h的范围0~9 a~f 2个h表示最多识别2位十六进制,如'\xab'

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值