问题及代码:
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:Project4.cpp
* 作 者:李楠
* 完成日期:2014年12月4日
* 版 本 号:v1.0
*
* 问题描述: 下面是一段使用了指针的程序。请利用“单步”执行的方式运行程序,深刻理解“指针变量存储的是地址值”、“通过指针变量间接访问”等概念。
* 输入描述: 略
* 程序输出: 略
*/
#include<iostream>
using namespace std;
int main()
{
int a=2, b=3, c[5]= {1,2,3,4,5};
int *p1, *p2, *p3;
p1=&a;
p2=&b;
p3=c;
p3++;
(*p3)+=10;
cout<<a<<'\t'<<b<<'\t'<<c[1]<<endl;
cout<<*p1<<'\t'<<*p2<<'\t'<<*p3<<endl;
return 0;
}
运行结果:
单步执行和分析
1.
单步执行到这一行的时候,窗口显示P1的值,即a的地址。
2.
单步执行到这一步时,窗口显示了p2的值即为a的地址。
3.
刚开始还不明白p3等号的右边为什么没有&,但后来经过改程序和单步执行才发现再给p3赋数组a的地址的时候是不用加&的,并且p3=c和p3=&a[0]的效果是一样的。
4.
p3++这个语句是把地址加一,所以p3的数值加了4,即p3地址为a[1]的地址,所以在改变p3代表的数的数值的时候,改变了a[1]的值!!!
5.
第一行输出的是a,b,和c[1]的值,因为a,b都有初值且都没有改变分别等于2,3, 而c[1]的值很明显地加了10,这更加验证了上一条的说法。
6.
第二行的输出和第一行一样,也就是说*p1的值就代表a的值,*p2的值就代表b的值,*p3的值就代表c[1]的值,这就是指针的精髓!!!
学习心得:
指针的入门并没有想象的那么难,只要在练习写程序的过程中多思考,弄明白*p的两种情况和p与*p的区别,这是很重要的!!