? 占用1个字节,实际案例中难以将布尔类型数据还原成源码,用于真假判断。
? 地址:只有变量才存在地址,常量没有地址(const 定义的伪常量有),一般地址用十六进制表示。在32位操作系统下,一般用32位二进制数表示,即4个字节,8个16进制数。
? 指针:定义,什么数据类型均可定义指针,如void *,指针保存了变量在内存中的地址,指针的类型用来解释地址,如从地址起始到什么地方结束,如何结束(如string的‘\0‘)。如**char *s=&a;**
说明s就是变量a的地址, * s就是变量a的值。那么**char**ss=&s;**
又是如何表现的呢,原来指针本身也会被分配内存,内存中存着&a,ss中存着&s即s被分配空间的首地址(char*ss=&s;
是错误的)。
? 引用:使用type*,type定义,如char&s=a;
定义时就必须初始化,实际上相当于变量的别名,对它的所有操作,本质上都是在操作它表示的变量。
? 指针和地址的区别:
指针 | 地址 |
---|---|
变量,保存地址 | 常量,内存标号 |
可修改,再次保存其他变量 | 不可修改 |
可以通过数据类型解释地址 | 不能仅通过地址进行取地址操作 |
? 指针偏移:对于指针char*s;
s++表示偏移一个字节,地址加1,而对于int型的指针,则地址加4。
? 指针相减有意义,但要求相同类型,可以计算两个地址之间元素的个数,结果为有符号整数。指针相加无意义。
? 定义的两种形式:宏机制#define
的真常量和const
定义的伪常量。const`有利于增加程序的健壮性。#define由系统判断是否被修改字符串定义在文件只读数据区,数据常量编译为立即数,const定义的常量实际上还是变量,根据作用域决定所在位置和属性,编译器会检查修改报错,修改方法:
const int nConst=5;
int *pConst=(int *)&nConst;
*pConst=6;
? hah,试了一下,发现修改失败。。
原文:https://www.cnblogs.com/dddddblog/p/Creverse2.html