指针和引用的区别
相同点: 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。
区别:
1. 指针是一个实体,而引用仅是个别名;
2. 引用使用时无需解引用(*),指针需要解引用;
3. 引用只能在声明时被初始化一次,之后不可变;指针可变;引用“从一而终” ^_^
4. 引用没有 const,指针有 const,const的指针不可变;
5. 引用不能为空,指针可以为空;
6.指针和引用的自增(++)运算意义不一样;
引用:
int a;
int &b = a;
引用的作用是为一个变量起了一个别名,两者有同一个存储单元,即具有同一地址。
注意:(1)引用不是一种独立的数据类型,对引用只有声明,没有定义。(2)声明一个引用时,必须同时使之初始化,即声明它代表哪一个变量。(3)在声明一个引用后,不能再使它作为另一个变量的引用(4)可以去引用地址
引用::
(1)引用不是一种独立的数据类型,对引用只有声明,没有定义。(必须先定义一个变量,然后声明对该变量建立一个引用)
(2)声明一个引用时,必须同时使之初始化,及声明它代表哪一个变量。
(3)在声明一个引用后,不能再使之作为另一变量的引用。
int a1 a2;
int &b = a1;
int &b = a2; //错误,不能把b又变成a2的引用
b = a2; //可以,因为b作为a1的引用,b就和a1一致,故相当于a1 = a2;
(4)不能建立引用数组,不能作为数组元素的别名
(5)不能建立引用的引用。
int a = 3;
int &b = a;
int &c = b; // 不能建立引用的引用
int * p = b; //不能建立指向引用的指针
(6)可以取引用的地址(如已声明b是a的引用,则&b就是变量a的地址&a)
int *pt;
pt = &b; // 把变量a的地址赋值给指针变量pt
(7)在声明了引用后,在使用它的时候不带&,而只引用引用的名字(如b,而不是&b)。
堆和栈的区别:
变量和对象的引用存储在栈区中,而对象的存储在堆中
宏
-
- 宏名不能以数字开头
- 宏在编译器编译时展开,而不是而不是预处理阶段
- 功能
- 替换数字
- 替换字符
- 进行数值运算
- 何时该使用符号常量?
- 总的来说就是你想"一换全换"的情况.比如: