标题:有关指针变量作为函数参数的问题求解
取消只看楼主
kaneliuwei
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-7-19
 问题点数:0 回复次数:6 
有关指针变量作为函数参数的问题求解
有两个程序,同样是以指针变量作参数,为什么结果会不一样?

第一个程序
#include <stdio.h>
void main()
{
 void change(int *p1,int *p2);
 int a,b;
 int *point_a,*point_b;
 scanf("%d,%d",&a,&b);
 printf("%d,%d\n",a,b);
 point_a=&a;
 point_b=&b;
 change(point_a,point_b);
 printf("%d,%d\n",*point_a,*point_b);
 getch();
 }
 void change(int *p1,int *p2)
 {
  int *temp;
  temp=NULL;
  temp=p1;
  p1=p2;
  p2=temp;
 }
输入:4,5
输出:4,5
      4,5

第二个程序
#include <stdio.h>
void main()
{
 void change(int *p1,int *p2);
 int a,b;
 int *point_a,*point_b;
 scanf("%d,%d",&a,&b);
 printf("%d,%d\n",a,b);
 point_a=&a;
 point_b=&b;
 change(point_a,point_b);
 printf("%d,%d\n",*point_a,*point_b);
 getch();
 }
 void change(int *p1,int *p2)
 {
  int temp;
  temp=*p1;
  *p1=*p2;
  *p2=temp;
 }
输入:4,5
输出:4,5
      5,4
搜索更多相关主题的帖子: include void change 
2012-09-05 11:33
kaneliuwei
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-7-19
得分:0 
找到答案了……
2012-09-05 11:36
kaneliuwei
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-7-19
得分:0 
回复 2楼 zklhp
指针指向的值在主函数不是已经定义了吗?我不明白的地方是,为什么同样是传递指针变量到函数change中,但要通过改变指针变量的值改变主函数的值必须用第二种方法
2012-09-05 11:41
kaneliuwei
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-7-19
得分:0 
书上给的答案是:因为单向的“值传递”原因,不可能通过调用函数来改变实参指针变量的值,但可以改变实参指针变量所指变量的值,但我不能理解的是,改变实参指针变量所指的值到底是怎么实现的。
2012-09-05 11:45
kaneliuwei
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-7-19
得分:0 
回复 6楼 zklhp
谢谢你,不过我可能还要再消化一下
其实就是不理解为什么用变量的形式进行值传递,在函数结束的时候内存会被释放,但用形参指针改变实参指针指向的值,却能在函数结束的时候保留下来,这个问题是不是要学习了汇编语言或计算机组成原理之后才能更好地理解?
2012-09-05 11:55
kaneliuwei
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-7-19
得分:0 
回复 8楼 zklhp
谢谢你,结合你的话我再好好看看书
2012-09-05 12:03
kaneliuwei
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-7-19
得分:0 
回复 8楼 zklhp
通过一顿饭的时间,让我顿悟了……
我理解你意思了,实参point_a通过值传递让形参p1==point_a
*point_a就是a,那*p1也同样是a,用*p1去改变a的值,因为a不属于函数内的单元,所以即使函数结束后,内存单元销毁,也不会影响到主函数中已经改变过的变量a,是这意思吧。

[ 本帖最后由 kaneliuwei 于 2012-9-5 12:51 编辑 ]
2012-09-05 12:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-380737-1-1.html




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

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