Chinaunix首页 | 论坛 | 博客
  • 博客访问: 236975
  • 博文数量: 50
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1487
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-24 10:31
文章分类
文章存档

2014年(20)

2013年(30)

分类: C/C++

2014-01-02 17:49:43

问题很简单:设置两个整形变量a,b,并按先大后小顺序输出a,b,用指针完成。

我第一次的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include
using namespace std;
int main()
{
    int a=18,b=20,c;
    int *p1,*p2;
    p1=&a;
    p2=&b;
    if(*p1<*p2){
        c=*p1;
        p1=p2;
        *p2=c;
    }
    cout<<*p1<<' '<<*p2<
    return 0;
}

   乍看一眼应该没错,然而结果却是    18 18    。

   大惑不解,仔细分析方才明白:在if 条件判断内,"p1=p2"使p1与p2均指向变量b,但接下来"*p2=c"一句却改变了 p2所指变量的值,即改变了b的值,使之等于18,故最后会输出两个18。

   将第12行改为"p2=&c",使p2指向变量c,即可达到目的。
阅读(1474) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~