
void f( int y,int *x) {y=y+*x; *x=*x+y;} main( ) { int x=2,y=4; f(y,&x); printf("%d %d\n",x,y); }
3个回答
展开全部
C语言几年没有看了......
首先x是个指针变量,即*X就是Main中的x = 2; 而y是一个变通的变量而已,在函数运行结束后y当中的值也就被释放了。
Function:
f:
y = 4 + 2;(6) // 这个值是要被释放的;
*x = 2 +6;(8) (*x = y + *x;) // 而这个值是不会被释放的,因为这个当中的x是个指针变量即main当中的x;
最后输出:也就是x =8 y = 4;
指针!好好看看书上的例子。
首先x是个指针变量,即*X就是Main中的x = 2; 而y是一个变通的变量而已,在函数运行结束后y当中的值也就被释放了。
Function:
f:
y = 4 + 2;(6) // 这个值是要被释放的;
*x = 2 +6;(8) (*x = y + *x;) // 而这个值是不会被释放的,因为这个当中的x是个指针变量即main当中的x;
最后输出:也就是x =8 y = 4;
指针!好好看看书上的例子。
追问
还是不怎么明白x的值啊,什么main中的x啊?x是指针 但那又有什么规律的啊?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先,这个问题你要理解什么是“按值传递”,什么是“按址传递”,对于你传入的y值,函数首先对y做了一个拷贝。
先看程序:首先y = y+*x 语句之后 y的副本变为了 6 ,然后*x = *x + y 这语句之后 *x 真正变成了8,因为传递的y走的是“按值传递” ,传递的“&x”走的是“按址传递”,前者不改变真事值,后者改变真值,所以自然打印 8,4 明白吗?不明白可以继续问我!~~
先看程序:首先y = y+*x 语句之后 y的副本变为了 6 ,然后*x = *x + y 这语句之后 *x 真正变成了8,因为传递的y走的是“按值传递” ,传递的“&x”走的是“按址传递”,前者不改变真事值,后者改变真值,所以自然打印 8,4 明白吗?不明白可以继续问我!~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询