|
| » 首页 » 电脑_数码 » 编程 » c语言问题 |
c语言问题 |
|
#include<stdio.h>
void fun(int *x,int *y) { printf("%d %d",*x,*y); *x=3; *y=4; } void main() { int x=1,y=2; fun(&y,&x); printf("%d %d",x,y); } 输出为多少,为设么,不明白题的意思 问题补充:为什么会是2,1,4 ,3 能解释一下过程吗? |
![]() |
|
|
想证明函数参数为变量和为指针的不同
首先运行fun(&y,&x)把y=2,x=1 传到void fun(int *x,int *y) 得到*x=2,*y=1 然后运行printf("%d%d",*x,*y); 在窗口中得到2 1 再运行*x=3,*y=4 传给主函数中fun(&y , &x) 得到y=3,x=4位置一一对应 再运行printf("%d%d",x,y);在窗口中得到4 3 所以运行结果为: 2 1 3 4 结果是:2 1 4 3 我也学习一下 输出是2 1 4 3 函数调用时首先执行函数体内的printf("%d %d",*x,*y)输出结果为 2 1;其次*x=3对y赋值为3,*y=4对x赋值为4,函数返回以后执行接下来的printf("%d %d",x,y)输出结果为4 3 结果是:2 1 4 3 因为第一个fun(&y,&x),传递函数值是把1和2的地址传递给 *x,*y,就相当于此时的x是2,y的值是1; *x=3; *y=4;这两句的意思是改的是主函数x等于4,主函数y等于3了,因为fun(&y,&x)把y的地址传递给了&x,把x的地址传递给了&y! 首先是实参与形参的问题,函数中引用的形参,*x,*y代表输入的第一个参数和第二个参数,你的传参顺序是&y,&x,当然输出2,1。并且将第一个参数负值为3,第二个为4。 然后是传地址的传参形式,函数直接访问了实际x,y变量,并修改了其中的值,所以,在输出x,y就变成了4,3。 首先:子函数(*变量) 调用 函数(&变量) 这样的形式是要带回返回值得 其次:此题在主函数里调用子函数的时候把x y故意颠倒下 这里考得应该是你对实参和形参的理解。对应如下:(调用时) 主 子 数值 y x 2 x y 1 看到这应该明白 子函数里显示的x y是子函数里的x y 当然是 2 1 了 然后再子函数里赋值 x = 3 y = 4 子函数结束,刚才说了 这样的形式是要带回返回值的,所以主函数里的x y 也跟着变化 输出主函数里的 x y 当然是 4 3了 所以结果应该是 ? 你自己说吧 祝你进步 在有疑问可以发信到 gabmyd@126.com 愿意为你解答! 输出的值是2 1 4 3 首先执行fun函数的printf语句,输出y和x的值:2 1 由于指针对x,y进行的是直接对内存地址上这个值的修改,所以在子函数当中不必return,回到主函数main当中,这两个值已经被修改,然后printf出:4 3 就是想证明函数参数为变量和为指针的不同,如果为指针,调用完之后在主函数中的实参之不变,但是若是指针实参就变了,本题目答案是 2 1 4 3 |
| 《c语言问题》答案收集时间:2006-08-24 20:22:07 |