指针

指针的类型只取决于操作系统的位数,因为存放的是地址信息,例如32位系统,不论什么类型的指针,都是4byte=32bit;

数组变量名相当于const类型的指针,如int a[], a 就相当于一个 int* ;

const 类型的指针,其所指地址是可以修改的,但是存在该地址的value是不能修改的;

vector类型在定义时初始化,等同于先定义,再使用了assign方法;

若想在函数中修改指针类型实参的指向并返回,有两种办法,第一种是直接返回指针类型;第二种是传入指向该指针的指针,如:

void example(int **p, int *q) {
*p = q;
}

int main()
{
int a(0), b(1);
int *p(&a), *q(&b);
example(&p, q);//传入p的地址
cout << *p << endl;//输出结果为1,即q指向的地址的值

}

指向常量的指针

const int *p,表示指向常量的指针,按照C++ 
中复合类型声明的理解
从右到左看,p是一个指针,指向const 
int,表示的意义就是不能通过p来修改p指向的值,而p本身所指向的地址是可以修改的。(此处也可以写成int const *p是一样的)

常量指针

int *const p,表示p本身是一个const,所以p所指的地址不会变,但是地址里的值是可以修改的。

free操作会删除指针所指的对象,释放其地址,指针指向的地址仍然不变;delete 功能一致,但是区别在于delete会调用对象的析构函数,而free不会,我推测原因可能是free是从C语言继承过来的,而C语言并没有面向对象机制。


2018/3/29

在函数的参数列表中,要记住&的作用始终是表示传地址而不是表示取地址,比如:

void add_(int * &a) {
++a;
}

这里的&表示对a这个指针取地址,而不是我之前理解的对a这个reference取地址,再提领(我之

前以为这里先取地址再提领表示还是a本身)。所以,在这个函数里对该指针所指的地址进行操

作会影响该地址的对象,同时若对该指针进行操作也会改变原函数中的这个指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值