有以下程序 #include <stdio.h> void fun(int *a,int *b) {int *c; c=a;a=b;b=c; }

有以下程序
#include <stdio.h>
void fun(int *a,int *b)
{int *c; c=a;a=b;b=c; }
main()
{int x=3, y=5,*p=&x, *q=&y;
fun (p,q);printf(“%d,%d,”,*P,*q);
fun(&X, &y);printf(“%d,%d\n”;*p.*q);
}
程序运行后的输出结果是 A)3,5.5,3 B)3,5,3,5 C)5,3,3,5 D)5,3,5,3
为什么结果是B,难道地址传递,不能改变值吗?求高手详细解答,谢谢

调用fun(p,q)时就是让a指向p指的地方,b指向q指的地方,函数内部是让c指向a指的地方,让a指向b指的地方,再让b指向c指的地方,你发现这里面没有改变p和q原来指向的地方,即p还是指向x,q还是指向y。fun(&x,&y)是让a指向x,b指向y,你会发现这根本没涉及到p和q的指向,更谈不上改变它们的指向,所以答案选B啊。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-26
参数传递是拷贝副本后传入的,指针地址交换不会是指向内容的交换,c=*a;*a=*b;*b=c 就可以交换值
第2个回答  2020-11-04
4.[单选题] 有以下程序 void fun(int *a,int *b) { int *c; c=a;a=b;b=c; } main() { int x=3,y=5,*p=&x,*q=&y; fun(p,q); printf("%d,%d,",*p,*q); fun(&x,&y); printf("%d,%d\n",*p,*q); } 程序运行后的输出结果是()。
A3,5,5,3
B3,5,3,5
C5,3,3,5
D5,3,5,3
第3个回答  2013-03-26
是啊,这个程序把地址传来传去,根本没有涉及到什么运算,数值到哪里改变去??

...void fun(int *a,int *b) {int *c; c=a;a=b;b=c; }
调用fun(p,q)时就是让a指向p指的地方,b指向q指的地方,函数内部是让c指向a指的地方,让a指向b指的地方,再让b指向c指的地方,你发现这里面没有改变p和q原来指向的地方,即p还是指向x,q还是指向y。fun(&x,&y)是让a指向x,b指向y,你会发现这根本没涉及到p和q的指向,更谈不上改变...

求09年3月份全国计算机等级考试二级c语言笔试试题的详细讲解
=’\\n’;n++);(23)有以下程序#include<stdio.h>main(){ int a1,a2;char c1,c2;scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);printf(“%d,%c,%d,%c”,&1,c1,a2,c2);}若想通过键盘输入,使得a1的值为12,a2的是为34,c1的值为字符a,c2的值为字符b,程序输出结果是:12,a,34,b,则正确的输入格...

有以下程序#include<stdio.h> void fun(int *p,int *q) { t=*p;*p=...
回答:void fun(int *p,int *q) { int t;\/\/你这里怎么少了 t 定义了 t=*p;*p=*q;*q=t; \/\/这三个就已经实现数据交换了 *q=*p; \/\/你这里怎么又赋值一次了?? 可以删去 }

有以下程序#include<stdio.h> main() { int c[6]={10,20,30,40,50,6...
你这里输出的是二个指针的地址之差,c[5]与c[0]的地址之差(以int的存储空间大小为单位),所以是5。若想得到所期望的50,就该是二个单元存储的值的差。此时的输出语句应该写为:include<stdio.h> main(){ int c[6]={10,20,30,40,50,60},*p,*s;p=a; s=&c[5];printf("%d\\n",...

(12)有以下函数 #include <stdio.h> void fun(char c)
递归程序,执行循序:fun('z')满足if条件,执行:fun('z'-1)即fun('y')满足if条件,继续执行fun('x'),不满足条件,输出'x',接着回到fun('y')执行输出'y',最后回到fun('z'),输出'z'.故最后的答案是:xyz

...#include"stdio.h" void fun(int a,int b,int c)
v=w=8;继续循环;w=u%v=0;u=v=8;v=w=0;循环结束(v=0)return u = 8;12,宏定义就是一模一样的抄下来的,S(a+b):PT*x*x:PT*a+b*a+b:PT*1+2*1+2=9.5;14, a=c++,b++;这句话没看太懂;17, c= f(a)\/f(b):c= a*a\/b*b=6*6\/2*2=36;...

#include<stdio.h> void main() { char a='本金',b='年数',c='年利率...
#include "stdio.h"void main(){int a=1,b=0;for(;a3;a++)switch(a++){case 1: b--;break;case 2: b++;break;case 3: b+=3;break;}printf("%d\\n",b);}A)0B)-1C)3D)其他14.以下程序的运行结果是( )。void main(){int a=4; char ch=’a’;printf( "%d\\n",(a2)(ch’A’...

2009年上半年全国计算机等级考试二级C语言笔试试题及答案
(26)有以下程序#include <stdio.h>void fun(int *a,int *b){ int *c; c=a;a=b;b=c;}main(){ int x=3,y=5,*p=&x,*q=&y; fun(p,q); printf("%d,%d,",*p,*q); fun(&x,&y);printf("%d,%d\\n",*p,*q);}程序运行后输出的结果是A)3,5,5,3B)3,5,3,5C)5,3,3,5D)...

急!!历年国家计算机二级c语言笔试真题答案。
#include<stdio.h> main() {int a=1,b=0; if(!a) b++; else if(a==0)if(a)b+=2; else b+=3; printf(”%d\\n”,b); } 程序运行后的输出结果是 A)0 B)1 C)2 D)3 (19)若有定义语句int a, b;double x;则下列选项中没有错误的是 A)switch(x%2) B)switch((int)x\/2.0 {case...

...结果是( )。 #include<stdio.h> void fun(int x) 不是先执行main吗...
先执行main()函数,但是main()函数里面先调用了fun()函数,因为a=5,所以fun(5)会输出6,接着回到main()继续输出5,所以答案是先6后5。请采纳,谢谢

相似回答