两个C语言填空题

[复制链接]
查看11 | 回复2 | 2010-8-3 18:33:25 | 显示全部楼层 |阅读模式
1.以下程序的运行结果是( )
int *swap(int *a,int *b)
{ int *p;
p=a;a=b;b=p;
return a;}
main()
{ int x=3,y=4,z=5;
swap(swap(&x,&y),&z);
printf("%d,%d,%d",x,y,z);}
答案:3,4,5
2.以下程序的运行结果是( )
swap(int *p1,int *p2)
{ int p;
p=*p1;*p1=*p2;*p2=p;
}
main()
{
int a=5,b=7,*ptr1,*ptr2;
ptr1=&a,ptr2=&b;
swap(ptr1,ptr2);
printf("%d,%d\n",*ptr1,*ptr2);
printf("%d,%d\n",a,b);
}
答案:7,57,5
请详细说明一下过程,谢谢

回复

使用道具 举报

千问 | 2010-8-3 18:33:25 | 显示全部楼层
第一题中int *swap(int *a,int *b){ int *p;p=a;a=b;b=p;return a;}这个函数的参数是两个指针(指向整型),在函数内部是将a指向的单元变成了b指向的单元,也就是a所存的地址为原来b中存的地址,b所存的地址为原来a中的地址。但是来两个地址所指向的单元中所存的整数并没发生变化。第二题swap(int *p1,int *p2){ int p;p=*p1;*p1=*p2;*p2=p; }这个函数就与第一题的不同第一题为 p=a;a=b;b=p;第二题为 p=*p1;*p1=*p2;*p2=p; //*p代表是取地址 也就是代表指针p中地址指向的那个单
回复

使用道具 举报

千问 | 2010-8-3 18:33:25 | 显示全部楼层
楼主你好!!!1.程序首先会调用swap(swap(&x,&y),&z);里面的swap(&x,&y),虽然楼主用的地址传递,但是在子函数里:int *swap(int *a,int *b){ int *p;p=a;a=b;b=p;return a;},a,b,都只是x,y地址的拷贝!!!是交换的a,b,地址的值,在子函数里,a,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行