c++中的指针、堆、引用、宏

指针和引用的区别

相同点: 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。

区别:

    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)。


堆和栈的区别:

变量和对象的引用存储在栈区中,而对象的存储在堆中


    • 宏名不能以数字开头
    • 宏在编译器编译时展开,而不是而不是预处理阶段
  • 功能 
    • 替换数字
    • 替换字符
    • 进行数值运算
  • 何时该使用符号常量? 
    • 总的来说就是你想"一换全换"的情况.比如:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sdkdslx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值