C++中的指针

来源:互联网 发布:淘宝最新刷销量方法 编辑:程序博客网 时间:2024/05/22 06:13

C++中指针是一个很让人头疼的东西,指针指向这指向那的很容易把人搞晕了。指针实现了对对象的间接访问,指针本身就是对象这点和引用不同,引用仅仅是对象的别名。指针可以在其生命周期内指向不同的对象(当然除了指针常量),另外指针无需在定义时赋值,指针也可以为空指针或者无效指针。

常用的定义方法如下:

int a=10;

Int *b=&a;//运用取地址运算符

注意:引用不是对象,没有实际的地址,所以没有指向引用的指针!

 

指针的值类型:

1.指向了一个对象;

2.指向紧邻对象所占空间的下一个位置;

3.空指针;

4.无效指针;(不能对无效指针操作,后果无法预计)

 

利用指针访问对象就是使用解引用运算符“*”,要注意的是解引用操作只能用于已经指向某个对象的指针。

空指针的产生方法:

int* p1=nullptr;

int* p2=0;

int* p3=NULL;//包含头文件cstdlib

注意:在使用指针的时候最好要进行初始化!

对于指针的赋值中,难以区分的是指针的指向改变了,还是指针指向的对象改变了,很简单的方法就是看“=”的左边是指针还是其指向的对象,简单点可以看其有没有用解引用运算符“*”。对于两个指针可以使用==和!=运算符来判断是否指向了同一个对象,另外指针还可以进行“-”操作,当然在数组中才有意义,减操作能够获取到两个对象之间索引的间隔,对两个指针“+”、“*”、“/”的操作时没有意义的。另外非空指针强制类型转换布尔型为true。

 

关于void*指针,该指针可以存放任何对象的地址,但是不能直接使用void* 指针,在使用void*之前必须要进行强制类型转换已确定其指向的对象类型,才能进行相关的操作,简单来说void*指针仅仅代表内存空间,对其内存中存放的对象类型根本不知道。

 

指针和数组名的区别

我们在使用数组的时候经常使用数组名来操作,且数组名代表了数组的首地址,感觉和指针的使用差不多,但其实数组名更包含的该数组的内存信息,指针仅仅是存放了一个地址。但需要注意的是,如果函数需要传入数组来进行操作的化,不能只传入数组名,因为编译器会将其退化成一个指针,所以在需要对数组操作的时候,形参必须要包含数组首地址以及数组长度信息。