| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 705 人关注过本帖
标题:这两个程序求的a,b的值为什么不一样呢?
只看楼主 加入收藏
姚杰
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:169
专家分:477
注 册:2010-6-1
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:5 
这两个程序求的a,b的值为什么不一样呢?
程序一:
#include<stdio.h>
void main()
{int *p1,*p2,*p;
int a=4;
 int b=6;
p1=&a;p2=&b;
if(a<b)
{p1=&b;p2=&a;)
printf("%d,&d",a,b);
printf("%d,%d",*p1,*p2);
}

程序二:

main()
{Exchg2(int *px, int *py)

  int a=4;
  int b=6;
int *pionter_1;int *pointer_2;
pointer_1=&a; pointer=&b;
if(a<b) Exchg2(pointer_1,pointer_2);
      Print(“a=%d,b=%d\n”, a, b);
}
Exchg2(int *px, int *py)
{
  int tmp=*px;
  *px=*py;
   *py=tmp;
  print(“*px=%d,*py=%d\n”,*px,*py);

程序一 a=4,b=6
程序二 a=6,b=4

: 程序二
主调函数if(a<b) Exchg2(pointer_1,pointer_2);只是交换了两个指针变量,没有交换值,为什么a,b的值却交换了
 程序一为什么没换呢?感觉两个程序是求同一个问题的。
搜索更多相关主题的帖子: include color 
2010-06-08 20:44
kingmacrobo
Rank: 2
来 自:HUST
等 级:论坛游民
帖 子:39
专家分:49
注 册:2010-6-1
收藏
得分:1 
程序一,是将p1,p2由分别指向a,b改为分别指向b,a ,即指针指向的地址变了,但a,b本身的值没有改变
而程序二,通过函数Exchg2(int *px, int *py)的传指针调用,将a和b的值互换了,但指针p1和p2指向的地址没有改变,即p1还指向a,p2还指向b
所以程序一结果为:a=4,b=6 程序二结果为a=6,b=4


2010-06-08 21:12
rainbow1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:277
专家分:839
注 册:2010-5-19
收藏
得分:5 

程序一:
#include<stdio.h>
int main()
{int *p1,*p2,*p;
int a=4;
int b=6;
p1=&a;p2=&b;
if(a<b)
{p1=&b;p2=&a;}
printf("%d,%d",a,b);
printf("%d,%d",*p1,*p2);
}

程序二:
#include <stdio.h>

void Exchg2(int *px, int *py );

int main()
{
    int *pointer_1;
    int *pointer_2;
//    Exchg2(*px,  *py);
    int a=4;
    int b=6;
   
    pointer_1=&a;
    pointer_2=&b;
    if(a<b)
    printf("a=%d,b=%d\n", a, b);
    Exchg2(pointer_1,pointer_2);

}

void Exchg2(int *px, int *py)
{
  int tmp=*px;
  *px=*py;
  *py=tmp;
  printf("%d,%d\n",*px,*py);
}

程序一只是改变两个指针指向的位置,而a与b的值并没有改变,但px与py所指向的置变了,故*px=6,而*py=4;;
在程序二中,通过子函数中的tmp,交换了指针指向地址的值,即交换了a与b的值;
如果子函数改成:
void Exchg2(int *px, int *py)
{
  int *tmp=px;
  px=py;
  py=tmp;
  printf("%d,%d\n",*px,*py);
}

则a与b 的值不会改变,因为只是交换了指针的指向,但原指向的值并没有交换,即与程序一的结果一样。


[ 本帖最后由 rainbow1 于 2010-6-8 21:34 编辑 ]
2010-06-08 21:33
姚杰
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:169
专家分:477
注 册:2010-6-1
收藏
得分:0 
还是没弄懂

持之以恒,别留遗憾,加油
2010-06-09 12:58
myhnuhai
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:3
帖 子:425
专家分:1725
注 册:2010-3-17
收藏
得分:4 
系统输出时,先查找要输出数值的地址,也就是先找到地址在输出地址里面存储的数值,当指针变量被交换后,指针指向的地址也发生了变化,所以按地址查找到要输出的位置的话,由于地址变化了所以存储的东西也变了,例如:指针a1指向地址b1,而地址b1里面存储着数值c1,指针a2指向地址b2,b2里面存储着数值c2,当指针变量交换后,指针a1指向了地址b2,指针a2指向了地址b1,但是存储在b1和b2里面的数值没有变化,所以要输出指针a1指向的值时会输出c2而不是c1,同样指针a2输出的是c1,不是c2;不知道讲清楚了没!我也有点糊涂了;呵呵呵

不要让肮脏的记忆,迷失了原本纯洁的心灵!
2010-06-09 13:22
姚杰
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:169
专家分:477
注 册:2010-6-1
收藏
得分:0 
回复 5楼 myhnuhai
不管懂不懂都谢谢你了,哈哈哈哈

持之以恒,别留遗憾,加油
2010-06-09 16:48
快速回复:这两个程序求的a,b的值为什么不一样呢?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022973 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved