标题:对于指针做为形参的处理过程一问?跪求了呀
取消只看楼主
lqlayy
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2007-3-15
 问题点数:0 回复次数:1 
对于指针做为形参的处理过程一问?跪求了呀
程序一:
#include <stdio.h>
#include <stdlib.h>
void swap(int *p[])
{
    int *temp;
    temp=p[0];//指针temp指向p[0]的指向也就是0240FF5C
    p[0]=p[1];//p[0]放弃原来的0240FF5C转而指向0240FF58
    p[1]=temp;//p[1]放弃原来的0240FF58转而指向0240FF5C,这个过程完了之后虽然形参没有了,但是返回实参后对指针首址的指向改变仍然存在,所以就交换了。
}
main()
{
int a=10,b=20,*p[2]={&a,&b};
printf("%p,%p\n",p[0],p[1]);
swap(p);
printf("%p,%p\n",p[0],p[1]);
}的执行结果为:
0240FF5C,0240FF58
0240FF58,0240FF5C
请按任意键继续. . .
程序二:
#include <stdio.h>
#include <stdlib.h>
void swap(int *p1,int *p2)
{
    int *temp;
    temp=p1;
    p1=p2;
    p2=temp;
}
main()
{
int a=10,b=20,*p1=&a,*p2=&b;
printf("%p,%p\n",p1,p2);
swap(p1,p2);
printf("%p,%p\n",p1,p2);
}执行结果为:
0240FF5C,0240FF58
0240FF5C,0240FF58
请按任意键继续. . .
本来程序一我明白了,不过一看二就糊涂了,我的理解如下:
对于程序一:如上注释;但是对于程序二不也和程序一一样吗,为什么一返回主函数指针的指向就没有交换?
实在是不明白程序二是为什么呀,大家快帮下忙呀,跪求了
搜索更多相关主题的帖子: 形参 指针 int temp 
2008-05-11 12:02
lqlayy
Rank: 1
等 级:新手上路
帖 子:100
专家分:0
注 册:2007-3-15
得分:0 
再次谢谢楼上朋友,哈哈,这回我终于明白了,通过如下过程可以证明:(指针数组、数组、指针,变量等类似)
#include <stdio.h>
#include <stdlib.h>
void swap(int *p1,int *p2)
{
    printf("%p,%p\n",&p1,&p2);
}
main()
{
int a=10,b=20,*p1=&a,*p2=&b;
printf("%p,%p\n",&p1,&p2);
swap(p1,p2);
}编译结果为:
0240FF54,0240FF50
0240FF38,0240FF3C
请按任意键继续. . .
这就可以证明了当指针做参数时,形参相当于另外定义了指针,只是与实参的指向相同,所以通过直接交换形参指针的方法是不能完成对实参的改变的,忙了我一天呀

[[it] 本帖最后由 lqlayy 于 2008-5-11 17:21 编辑 [/it]]

学习编程的秘诀是:编程,编程,再编程;
2008-05-11 17:20



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




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

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