输出结果是8 4
y传过去的值4
是一个形参
所以在函数体内改变
原来的y是不变的
所以y最终是不变的
形参就是
y的值被存储在另外的内存地址上 在f函数体内计算的时候
并不是使用y本身 是用另外的存储着y的值的副本的内存地址上的值
而x传过去的是内存地址
然后在f函数内改变指针x指向的这个内存地址上的值
就是改变x本身的值
所以x会变
形参y=4
那么y=y+ *x 就是 y=4 + 2;
所以形参y是6
他改变的是f函数内的y的副本 是另外的内存地址上的值 所以y本身不改变
然后 *x=*x+y 就是 *x=2+6
然后 *x改变的是 x指向的内存地址上的值 就是改变的是x的值
所以 x的值被改变为8
上面说的是思路
下面用代码讲
x=2;
y=4;
传过去的时候
f(y,&x);
在f函数体内
第一参数 y和f函数体外的y是2个内存地址
只不过把外部y的值4赋值给了f函数体内的y,
第二参数 是f函数外的x变量所在的内存地址
在使用y时候 用的是函数体内的y
这和原本的y是2个变量
所以改变f函数体内的y的值
本身的y的值并不会改变 一直为4;
f函数体内的
y=y+*x;
*x是指针x指向的内存地址上的值 就是f函数外的x的本身地址上的值
就是y=4+2;
所以y的值为6 注意: 这个是f函数体内的y 不是原本的y的值
然后
*x是2
*x=*x+y;
就是 *x=2+y;
y的值为6
那么*x就是 2+6
*x=8;
那么 printf("%d %d\n",x,y);
输出
x的值在f函数内被改变为8,
y的值并未改变 所以输出4
最终结果
8 4
[
本帖最后由 kankanzaishu 于 2011-9-6 15:13 编辑 ]