课程首页 › 第6部分 › 第79课

第79课 探寻宝藏的地址

第6部分 C++ 的灵魂 · 指针· 知识点:指针、指针运算

探寻宝藏的地址(指针、指针运算)

插图

指针可谓是C++的灵魂,那什么是指针呢?在计算机的内存中存放着各种数据,而指针则告诉我们这些数据所存放的位置(数据存放的地址)。

一起来探寻一下宝藏吧。

探寻宝藏

插图

运行程序:

宝藏

0x6ffe00

(1)string str定义了一个字符串变量str。

(2)string*strp定义了一个字符串指针变量strp。

划重点

定义指针变量的形式:

插图

类型说明符表示该指针变量所指向的变量的数据类型。

(3)str="宝藏"为变量str赋值,此处内存的某一个地址中存放了“宝藏”。

存放的数据是字符串“宝藏”,但是“宝藏”存放到了哪里呢,那里的地址是什么呢?

(4)通过strp=&str将变量str的地址赋值给指针变量strp。

敲黑板

如何获取一个变量的地址呢?

通过&+变量名的方式获取→&str获取到str变量的地址。

通过给指针变量strp赋值,strp指向了存放“宝藏”的地址。

(5)输出变量str的内容是将存放在该变量中的数据输出了,而输出指针变量strp的内容则是将存放其中的地址输出了。

那么如何通过地址获取到地址中的数据呢?

cout<<*strp<<endl*strp表示strp指向的变量,strp存放的是变量str中的地址,*strp就访问了变量str,可以把*strp看作和str等价。

敲黑板

这里的*strp和定义指针变量时的*strp是不同的,声明或定义变量时,在变量前加*表示这是一个指针变量。

指针加法

指针也能做加法。

插图

运行程序:

(1)上述代码中声明了两个整数类型的变量num1和num2。

(2)上述代码中声明了两个整数类型的指针变量num1p和num2p。

(3)将指针变量num1p和num2p分别指向num1和num2的内存空间。

敲黑板

变量的内存地址使用取地址运算符&获取。

&num1

&num2

(4)通过*num1p +*num2p进行值的运算。

*num1p +*num2p等价于地址指向变量num1+num2

划重点——指针操作说明表

插图

巩固练习

(1)根据下面程序的输出结果完善程序代码。

插图

运行程序:

(2)阅读以下程序代码,填写输出结果。

插图

输出:_____________________________________________________________ _____

(3)如果再加一句代码cout<<i<<""<<j<<endl;,又会多输出什么?