第十五周 项目一:打入内部寻内幕

问题及代码:

/*  
* 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的区别,这是很重要的!!

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值