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

第82课 指向火车头

第6部分 C++ 的灵魂 · 指针· 知识点:指针、指针与数组

指向火车头(指针、指针与数组)

数组指针有个特别形象的比喻就是火车头,它并不代表整个数组,而只是指向了数组的首地址,随之拉动整个数组。

来吧,一起探索一下指针是如何拉动整个数组的。

指向火车头

插图

运行程序:

0x6ffde0 3 2

结果分析

当p=num1时,指针p指向数组num1的首地址,p就意味着是num1数组的首地址0x6ffde0。*(p+1)则是首地址往后移动一位,是数组的第二个元素3。*p+1表示第一个元素的值加上1,其结果为2。

插图

程序分析

(1)探索其中的p、*(p+1)、*p+1有什么区别。

因为p=num1,此时指针变量指向了num1数组的首地址。

*(p+1)分为两步:①将地址往后移动一个位置到了数组的第二个元素的地址;②在前面加了*表示内存中的数据。*(p+1)与num1[1]等价,是地址加了1。

*p + 1和num1[0]+ 1等价,是值加了1。

(2)p=&num2[3],此时p指向的地址是数组num2的第4个元素6。

插图

循环6次,观察数组{9,8,7,6,5,4,3,2,1,0}:

从元素6开始输出

*(p+0)→(当前位置)6

*(p+1)→(地址后一位)5

*(p+2)→(地址后两位)4

*(p+3)→(地址后三位)3

*(p+4)→(地址后四位)2

*(p+5)→(地址后五位)1

(3)

插图

循环6次,观察数组{9,8,7,6,5,4,3,2,1,0}:

从元素6开始输出,输出的值+i↓

*p+0→6+0→6

*p+1→6+1→7

*p+2→6+2→8

*p+3→6+3→9

*p+4→6+4→10

*p+5→6+5→11

插图
插图

巩固练习

(1)以下哪行代码可以使得程序输出数字9?()

已知:

int arr[10]={1,2,3,4,5,6,7,8,9,10}; int*p=arr; A.*p + 9

B.*p +=9

C.*(p+9)D.*(p+8)(2)阅读以下程序,填写程序的输出结果。

插图

输出:_____________________________________________________________ _____

(3)阅读以下程序,填写程序的输出结果。

插图

输出:_____________________________________________________________ _______