重学 c++ primer(5)

重学c++ primer(5)

指针:

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

int ival=42;
int *p=&ival;
第一条语句定义并初始化了整型变量ival为42,第二条语句把p定义为指向int的指针。随后初始化p令其指向名为ival的int对象。另外。由于引用不是对象。没有实际地址。所以不能定义引用的指针。在定义并初始化指针时,一定要注意指针的类型与其所指向的对象的类型要严格匹配。例如:

double dval;
double *pd=&dval;
double *pd2=pd;
上述三条语句是正确定义。因为类型对应一致。定义正确。再看下面两条:

int *pi=pd;
pi=&dval;

有明显错误,第一条指针pi‘的类型与pd不匹配。第二条试图把double型赋给int,这是绝对不容许的。所以注意。指针的类型用于指定它所指向对象的类型。所以必须保证一致。

指针值:

所说的指针的值实际上是地址。一般来说指针的值为下列4种之一:

1.指向一个对象。

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

3.空指针、

4.无效指针。

利用指针访问对象:

如果一个指针指向了一个对象,则容许使用解引用符,来访问该对象。

比如:

int ival=42;
int *p=&ival;
cout<<*p;
来看第二条语句。p存放着变量ival的地址。注意下一个语句,由解引用符*来得到p的对象,输出42;

对指针解引用会得到它所指向的对象,所以如果给解引用的结果赋值,实际上是给指针所指向的对象赋值。比如

*p=0;
cout<<*p;

顺便说一下空指针,它是不指向任何对象的指针,在c++11特性中,可以用nullptr来初始化。

赋值与指针:

首先是指针和引用的区别。这个很容易搞混。引用本身并非一个对象,一定定义了引用,就无法令其在绑定其他对象。以后再使用这个引用都是访问他所绑定的对象。而指针就没这么多要求,它和其他变量一样。可以给指针赋值。从而指向一个新的对象。

再来看看void*指针。其实它是一个特殊的指针类型,可以存储任何对象的地址。一个void*指针存放一个地址。比如

double obj=3.14,*pd=&obj;
void *pv=&obj;
pv=pd;

pv是void类型的指针,所以pv可以存放任何对象的地址。

下面说二级指针。

**表示指针的指针,比如

int val=1024;
int *pi=&val;
int **ppi=&pi

此处pi指向int的指针,ppi指向int型指针的指针。下面的图可以概括:





指向指针的引用

引用本身不是一个对象,因此不能定义指向引用的指针。但指针是对象。所以存在对指针的引用。比如

int i=42;
int *p;
int *&r=p;
r=&i;
*r=0;

第二条语句是指p是一个int型指针,接下来r是一个对p的引用。然后是r引用一个指针。最后解引用r得到i。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望习不同技术领域的小白或进阶习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望习不同技术领域的小白或进阶习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望习不同技术领域的小白或进阶习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望习不同技术领域的小白或进阶习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望习不同技术领域的小白或进阶习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值