c++笔记_指针

本文详细介绍了C++中的指针,包括指针与引用的区别、定义指针的方法、获取对象地址、指针值的状态、利用指针访问对象、空指针的表示及赋值操作、其他指针操作以及void*指针的使用。文章强调了指针初始化的重要性,以及正确使用指针避免错误的必要性。
摘要由CSDN通过智能技术生成


前言

指针(pointer)是“指向”另外一种类型的复合类型。与引用类似,指针也实现了对其他对象的间接访问,像其他数据值一样,内存地址或指针值可以存储在适当类型的变量中。存储地址的变量被称为指针变量,但通常简称为指针。


一、指针和引用的区别

指针与引用相比有很多不同点:
一:指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。
二:指针无须在定义时赋初值。和其他内置类型一样,在快作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。

二、定义指针类型方法

定义指针类型的方法将声明符写成*d的形式,其中d是变量名。如果在一条语句中定义了几个指针变量,每个变量前面都必须有符号*:

int *ip1, *ip2;			//ip1和ip2都是指向int型对象的指针		
double dp, *dp2;		//dp2是指向double型对象的指针,dp是double型对象

三、获取对象的地址

指针存放某个对象的地址,想要获取该地址,需要使用取地址符(操作符&):

int ival = 42;		
int *p = &ival;				//p存放变量ival的地址,或者说p指向变量ival的指针

第二条语句把p定义为一个指向int型的指针,随后初始化p令其指向名为ival的int对象。因为引用的不是对象(即p是一个指针前面有*号),没有实际地址,所以不能定义指向引用的指针。

大部分情况下有指针类型的都要和它所指向的对象严格匹配:

double dval;
double *pd = &dval;			//正确:初始值是double型对象的地址
double *pd2 = pd;			//正确:初始值是指向double型对象的指针

int *pi = pd;				//错误:指针pi的类型和pd类型不匹配(pi是int型,pd是double型)
pi = &dval;					//错误:试图把double型对象的地址赋给int型指针

因为在声明语句中指针的类型实际上被用于指定它所指向对象的类型,所以二者必须匹配。如果指针指向了一个其他类型的对象,对该对象的操作将发生错误。

四、指针值

指针的值(即地址)应属下列4种状态之一:
1.指向一个对象。
2.指向紧邻对象所占空间的下一个位置。
3.空指针,意味着指针没有指向任何对象。
4.无效指针,也就是上述情况之外的其他值。

注意:试图拷贝或以其他方式访问无效指针的值都将引发错误。编译器不负责检查此类错误,与试图使用未经初始化的变量是一样的。访问无效指针的后果无法预计,因此必须清楚任意给定的指针是否有效。

虽然上述第2钟和第3钟形式的指针是有效的,但其使用同样受到限制。显然这些指针没有指向任何具体的对象,所以试图访问此类指针对象的行为不被允许。这样做了,后果也是无法预计的。

五、利用指针访问对象

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

#include<iostream>
using namespace std
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值