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

指针可谓是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;,又会多输出什么?