猿问

请问以下程序的结果是什么呢? 有知道的吗?

以下程序的结果? void foo(int*a, int* b) { *a = *a+*b; *b = *a-*b; *a = *a-*b; } void
以下程序的结果? 
void foo(int*a, int* b) 

*a = *a+*b; 
*b = *a-*b; 
*a = *a-*b; 

void main() 

int a=1, b=2, c=3; 
foo(&a,&b); 
foo(&b,&c); 
foo(&c,&a); 
printf("%d, %d, %d", a,b,c); 
}

守候你守候我
浏览 195回答 2
2回答

喵喔喔

首先,这题考点是参数传地址的作用,传地址的作用就是在函数内部可更改外部变量的值所以在第一次调用foo()时,在这个过程中*a = *a+*b; --> *a=1+2=3; (注意,此时a的值已经改变,下面的语句中a的值已经是3,不在是1)*b = *a-*b; --> *b=3-2=1;(注意a的值为上个语句中改成的3,b未更改过,为2)*a = *a-*b; --> *a=3-1=2;(注意此时a的值再次被改变。a,b的值都已更改所以分别是3,2)故第一次调用完后a=2,b=1,c=3。此时main函数中的abc的值已被改变在次使用时为改变后的值其他两次调用同理还需要注意的是,第二次调用foo的时候,传了实参b,c的地址,此时foo函数形参a就是b,形参b就是c。要一 一对应,总的来说就是看传参的时候看传的是哪个变量,不能仅看foo函数中的变量名

森林海

首先应弄清楚,foo()中的a、b不是main()中的a、b,每次调用foo()都是带入2个int类型数据地址,经foo()运算后仍存放在这2个地址内(而不是a、b地址内)返回 第一次调用foo()后,a=3,b=1,c=3(未变) 第二次调用foo()后,a=3(未变),b=3,c=1 第三次调用foo()后,a=1,b=3(未变),c=2
随时随地看视频慕课网APP
我要回答