以下程序输出的结果是(3 5)

以下程序输出的结果是(3 5)
#include<stdio.h>
void swap(int *a,int *b)
{ int *t;
t=a;a=b;b=t;
}
main()
{ int i=3,j=5,*p=&i,*q=&j;
swap(p,q); printf("%d %d\n",*p,*q);}
请详细说明关于传地址传值问题。谢谢~

10.2.3指针变量作为函数参数
函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针类型。它的作用是将一个变量的地址传送到另一个函数中。

【例10.3】题目同例10.2,即输入的两个整数按大小顺序输出。今用函数处理,而且用指针类型的数据作函数参数。

swap(int *p1,int *p2)

{int temp;

temp=*p1;

*p1=*p2;

*p2=temp;

}

main()

{

int a,b;

int *pointer_1,*pointer_2;

scanf("%d,%d",&a,&b);

pointer_1=&a;pointer_2=&b;

if(a<b) swap(pointer_1,pointer_2);

printf("\n%d,%d\n",a,b);

}

对程序的说明:

swap是用户定义的函数,它的作用是交换两个变量(a和b)的值。swap函数的形参p1、p2是指针变量。程序运行时,先执行main函数,输入a和b的值。然后将a和b的地址分别赋给指针变量pointer_1和pointer_2,使pointer_1指向a,pointer_2指向b。

接着执行if语句,由于a〈b,因此执行swap函数。注意实参pointer_1和pointer_2是指针变量,在函数调用时,将实参变量的值传递给形参变量。采取的依然是“值传递”方式。因此虚实结合后形参p1的值为&a,p2的值为&b。这时p1和pointer_1指向变量a,p2和pointer_2指向变量b。

接着执行执行swap函数的函数体使*p1和*p2的值互换,也就是使a和b的值互换。

函数调用结束后,p1和p2不复存在(已释放)如图。

最后在main函数中输出的a和b的值是已经过交换的值。

请注意交换*p1和*p2的值是如何实现的。请找出下列程序段的错误:

swap(int *p1,int *p2)

{int *temp;

*temp=*p1; /*此语句有问题*/

*p1=*p2;

*p2=temp;

}

请考虑下面的函数能否实现实现a和b互换。

swap(int x,int y)

{int temp;

temp=x;

x=y;

y=temp;

}

如果在main函数中用“swap(a,b);”调用swap函数,会有什么结果呢?请看下图所示。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-03-15
void swap(int *a,int *b) 函数调用用指针调用,调用前后,a 和 b 指向的地址 不会变。如果 函数调用 中 给它们赋了新值,新值会 带回来,如果没有 赋新值,那么 调用前后 地址不变,数值不变。

这样写看得清楚:
void swap(int *a,int *b)
{ int *t;
t=a;a=b;b=t;
printf("%d %d\n",*a,*b); // 打出 5 3
}
void main()
{ int i=3,j=5,*p=&i,*q=&j;
printf("p: %d\n",p); // 调用前 p 地址
swap(p,q); // 打出 5 3
printf("p: %d\n",p); // 调用后 p 地址 不变
printf("%d %d\n",*p,*q); // 打出 3 5
}
------------------------

所以,你要让它们交换数值才行:
void swap(int *a,int *b)
{ int t; t=*a;*a=*b;*b=t; }
第2个回答  2010-03-15
传地址我自己还没有自学到。但是可以给你详细的分享下传值问题。
首先,主程序中。把3赋给i,5赋给j,再把i赋给p,j赋给q,此时,p=3,q=5
第3个回答  2010-03-16
#include<stdio.h>
void swap(int *a,int *b)
{ int t;
t=*a;
*a=*b;
*b=t;
}
main()
{ int i=3,j=5,*p=&i,*q=&j;
swap(p,q);
printf("%d %d\n",*p,*q);
fflush(stdin);
getchar();}
运行的结果是5 3

#include<stdio.h>
void swap(int *a,int *b)
{ int *t;
t=a;a=b;b=t;
}
main()
{ int i=3,j=5,*p=&i,*q=&j;
swap(p,q); printf("%d %d\n",*p,*q);
fflush(stdin);
getchar();}
的运行结果是3 5
相似回答