
帮忙一道C语言题!.
(28)有如下程序voidf(intx,inty){intt;if(x<y){t=x;x=y;y=t;}}main(){inta=4,b=3,c=5;f(a,b);f(a...
(28) 有如下程序
void f(int x,int y)
{ int t;
if(x<y){ t=x; x=y; y=t; }
}
main()
{ int a=4,b=3,c=5;
f(a,b); f(a,c); f(b,c);
printf("%d,%d,%d\n",a,b,c);
}
执行后输出结果是
A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,5
详细 展开
void f(int x,int y)
{ int t;
if(x<y){ t=x; x=y; y=t; }
}
main()
{ int a=4,b=3,c=5;
f(a,b); f(a,c); f(b,c);
printf("%d,%d,%d\n",a,b,c);
}
执行后输出结果是
A) 3,4,5 B) 5,3,4 C) 5,4,3 D) 4,3,5
详细 展开
7个回答
展开全部
答案D
原样输出
void f(int x,int y)
这个函数实际上没有任何作用
无法改变main中变量的值
这是C语言传参问题
void f(int x,int y) 值传递
要使函数f能够生效应改成指针传递(C++更有引用方法)
void f(int *x,int *y)
{ int t;
if(*x<*y){ t=*x; *x=*y; *y=t; }
}
原样输出
void f(int x,int y)
这个函数实际上没有任何作用
无法改变main中变量的值
这是C语言传参问题
void f(int x,int y) 值传递
要使函数f能够生效应改成指针传递(C++更有引用方法)
void f(int *x,int *y)
{ int t;
if(*x<*y){ t=*x; *x=*y; *y=t; }
}
展开全部
d
程序在主函数中调用f函数把(a,b)\(a,c)\(b,c)分别传给函数f但这些都是值传递所以在不管函数f做了什么在内存中都是建立了以后又给释放了也就是说第一次调用函数f把a\b的值分别传给x\y在内存中分配给x\y地址又定义了一个t内存也给t分配了一个地址然后判段x是否小于y如果小于做交换。但最后不管做没做交换都是对x和y做而在函数f执行完了以后内存会自动释放它们在第二次调用的时候又从新为它们分配内存空间之后又释放所以不管怎么调用 对主函数中的a\b\c都不会有任何影响结果当然是b如果还不理解你可以在b函数最后一行加上
printf("%x,%x\n",x,y);来看看每次调用时x和y的地址
程序在主函数中调用f函数把(a,b)\(a,c)\(b,c)分别传给函数f但这些都是值传递所以在不管函数f做了什么在内存中都是建立了以后又给释放了也就是说第一次调用函数f把a\b的值分别传给x\y在内存中分配给x\y地址又定义了一个t内存也给t分配了一个地址然后判段x是否小于y如果小于做交换。但最后不管做没做交换都是对x和y做而在函数f执行完了以后内存会自动释放它们在第二次调用的时候又从新为它们分配内存空间之后又释放所以不管怎么调用 对主函数中的a\b\c都不会有任何影响结果当然是b如果还不理解你可以在b函数最后一行加上
printf("%x,%x\n",x,y);来看看每次调用时x和y的地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
答案 D
因为采用的是值传递,a b c本身的值都不会改变,采用引用传递才会改变。
因为采用的是值传递,a b c本身的值都不会改变,采用引用传递才会改变。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
答案是4,3,5,因为在函数f中并没有改变a,b,c其值,只是按值传递不是按地址传递,所以不会改变a,b,c的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
d
虽然你也用了函数调用,但函数并不返回值,所以a,b,c的值不变
虽然你也用了函数调用,但函数并不返回值,所以a,b,c的值不变
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询