C++ 学习笔记之指针和引用

一、指针

1. 定义: 

int *a;
double *b;

int ival = 42;
int *p = &ival;
int *q = p;        //指针类型必须相同

2. 指针的值:

指针的值必须属于下列四种状态之一:

a. 指向一个对象(object);

b. 指向对象所占空间的下一个位置(可能是逻辑地址也可能是物理地址);

【注】1.运行在Windows(Linux) Rang3的程序的指针指向逻辑地址,而且只能指向逻辑地址;
                      2.运行在Windows/Linux Rang0的程序的指针可以指向逻辑地址,也可以指向物理地址,由功能决定;
                      3.对于嵌入式系统,如果有MMU,而且启用了MMU,指针指向的是逻辑地址;
                      4.对于嵌入式系统,如果没有MMU,或者没有启用了MMU,指针指向的是物理地址。

c. 空指针;

        int *p1 = 0;
        int *p2 = nullptr;
        int *p3 = NULL;

d. 无效指针;

3. void* 指针:

无法直接操作void*指针所指的对象。

 

二、引用

1. 概念:引用即变量的“别名”,且必须被初始化;

【注】无法令引用重新绑定另外一个对象。

2. 定义(允许一条语句定义多个引用):

    int i = 1, j = 2;
    int &m = i, &n = j;

 

三、指针和引用的异同

1. 相同之处:

a.指针和引用本质上都是地址的概念,引用在内部其实是用const指针来实现的;

b.给函数传递参数的时候,一级指针和引用作为函数参数的时候可以达到相同的效果;

例如:数组的引用和指向数组第0个元素的指针。

c.指针的大部分效果都可以通过引用来实现;

d.二级指针作为参数的时候就是希望在函数的内部修改指针的指向.这个时候利用指针的引用可以达到同样的效果;

2. 不同之处:

a. 指针本身即一个独立的对象,其可以反复修改指向的内容,允许赋值、拷贝等操作;

b. 指针并非一定要初始化,无需在定义时赋值;

c. 指针可以存在多级操作,即指向指针的指针,而引用不允许;

d. 引用可以引用指针,因为指针本身也是一个对象,但指针不可以指向引用;

e. 存在指针数组,不存在引用数组,但是存在对数组的引用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值