第82课 指向火车头
指向火车头(指针、指针与数组)
数组指针有个特别形象的比喻就是火车头,它并不代表整个数组,而只是指向了数组的首地址,随之拉动整个数组。
来吧,一起探索一下指针是如何拉动整个数组的。
指向火车头

运行程序:
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)阅读以下程序,填写程序的输出结果。

输出:_____________________________________________________________ _______

