C++笔记(指针部分)

指针

获取对象的地址(指针初始化)

int ival = 45;
int *p = &ival;

利用指针访问对象

如果指针指向了一个对象,则允许使用解引用符(*)来访问该对象,比如:

int ival = 42;	
int*p = &ival;				//定义一个指向ival的指针
std::cout << *p;
*p = 0;						//改变*p所指向的对象,即经由指针p改变ival的值
std::cout << *p;			//输出0

空指针

空指针表明指针不指向任何对象,以下是几种生成空指针的办法

int *p1 = nullptr;			//等价于int *p1 = 0,推荐使用这种方法
int *p2 = 0;				//直接将p2初始化为字面常量
//需要首先#include cstblib
int *p3 = NULL;				//等价于int *p3 = 0

ad:需要指出的是,这里的0和int类型中的0不是一个概念,下面的这段代码就会报错

int zero = 0;
pi = zero;

赋值和指针

就是说指针可以在生命周期内志向不同的地址,从而指向一个新的对象

int i1 = 0 , i2 = 1;
int *p = &i1;
std::cout << *p << " ";
p = &i2;
std::cout << *p;
//输出结果为0 1

其他指针操作

需要记下来的也就是指针的判断了
如果指针为空,则条件取false,如果指针不空,则条件取true(可以在指针使用之前加一个判断,避免其为空指针)

//一个栗子
int i = 42;
int *p = &i;
int *p1 = nullptr;
if(p)
	std::cout << "p is not empty" << std::endl; 
if(p1)
	std::cout << "p1 is not empty";
else
	std::cout << "p1 is empty";

另外对于两个同一类型的指针可以用==和!=来进行比较,返回的是bool类型,如果两个指针存放地址相同,则判定相等;反之,不等。

void*指针

void* 指针可以指向任意对象的地址,但存放后我们对该地址的数据类型是未知的,因此他能做的事情比较有限:
拿它与别的指针比较、作为函数的输入输出,赋值给另外一个void* 指针,不能直接操作void* 指针所指的对象

指向指针的指针(套娃 @_@)

简单来说,举个例子:
** 表示指向指针的指针,*** 表示指向指针的指针的指针

int ival = 42;
int *p = &ival;		//指向ival的一个指针
int **pp = &p;		//指向指针p的指针

那么如果我们要通过pp来访问ival,那么无疑要用到两次解引用:

std::cout << **pp;

指向指针的引用

下面看一个例子:

int ival = 42;
int *p;				//一个指针
int *&r = p;		//指向指针的一个引用r

r = &ival;
std::cout << "*r = " << *r << "  *p = " << *p << std::endl;
//输出42  42
*r = 0;
std::cout << "*r = " << *r << "  *p = " << *p << std::endl;
//输出0  0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值