#include<stdlib.h>
#include<stdio.h>
int i=7;
void f(int l, int m, int *n, int *o)
{
int i;
i=10;
j=12;
l++;
m++;
(*n)++;
o++;
}
int main(){
int i=2,j=3,k=4,*p;
p=&j;
f(i,j,p,&k);
printf("%d%d%d%d",i,j,k,*p);
return(0);
}
答案是 2 4 4 4 ,求详细解释怎么得到这四个数的,谢谢!
按理说i,j都是进入f中都自加了1啊,为什么i不变而j变成4了??另外k,p也不懂
i我明白了,j进入f之后值不变我明白,但这时对j的处理不已经结束了么?后面对于p的++为什么还会影响到j呢?另外最后k进入f后0++,为什么o地址加1值还可以不变呢?本人菜鸟
追答建议你先看看指针的知识:
下面我简单说说原因:p是指针变量,指向j,到这一步时:*n ++(即*p ++);也就是间接使j + 1了,退出定义函数f时,虽然p的空间会被释放,但它在*n ++
这不已经改变了j的值。
你要知道,主函数中传递过去的&k,这是是地址传递,系统会为形参开辟一个临时指针变量,然后把实参的地址传送给形参,也就是说形参n(副本)跟
main中的k的地址不同的,f函数返回时会释放掉;原来的k并没有改变
i我明白了,j进入f之后值不变我明白,但这时对j的处理不已经结束了么?后面对于p的++为什么还会影响到j呢?另外最后k进入f后0++,为什么o地址加1值还可以不变呢?本人菜鸟