回 帖 发 新 帖 刷新版面

主题:c急救!!!!

29、有以下程序
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);
}
执行后输出的结果______。
答案:   8  4



void swap(int *a,int *b)
 {int *t;
  t=a;a=b;b=t;
 }
main()
 {int x=3,y=5,*p=&x,*q=&y;
  swap(p,q);
  printf("%d%d\n",*p,*q);
 }
答案:   35
请那位大侠给小弟解释一下,需要解释的清晰一点哦。拜托!!!

回复列表 (共1个回复)

沙发

第一题,x是地址传递,所以函数里的x的修改反映到了主函数里,而y是值传递,在函数里的修改不能体现到主函数里
第二题,实质是考实参在函数中的变化不会影响主函数中相应的值,看起来传递了指针,但是在函数里交换的是临时指针本身,而相应的指针指向的值没有发生变化
举例来说,3存在内存里0x1000的地方而5存在内存里0x5000的地方,现在一个变量存着0x1000另一个存着0x5000,把这两个地址交换保存的变量之后,并没有改变0x1000出的3和0x5000处的5
以上

我来回复

您尚未登录,请登录后再回复。点此登录或注册