首页 > 试题广场 > 以下程序的结果?  
[单选题]
以下程序的结果?
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);
}
  • 1,2,3
  • 1,3,2
  • 2,1,3
  • 3,2,1
推荐
B。
foo(*a, *b)交换a和b的值,所以经过a、b、c的值经过
foo(&a, &b); foo(&b, &c); foo(&c, &a);
由1,2,3变为1,3,2
编辑于 2015-01-02 21:47:59 回复(0)
指针参数 本质上是 值传递,  但是 值的类型是 变量的引用。所有的操作都是对变量本身的操作而不是 它的复制。
发表于 2015-06-09 14:52:50 回复(0)
交换。
发表于 2015-08-22 10:59:24 回复(0)
a b c
1 2 3
foo(&a, &b);
3 2 3
3 1 3
2 1 3
foo(&b, &c);
2 4 3
2 4 1
2 3 1
foo(&c, &a);
3 3 1
3 3 2
1 3 2
发表于 2017-02-08 21:16:57 回复(0)
传址操作,实际上是将两个指针参数所指向的值交换了
发表于 2018-08-21 15:49:29 回复(0)
程序中foo函数代码告诉了我们一个在不使用指针的情况下交换两个变量的值,即:
a = a + b;
b = a - b;
a = a - b;
因为这里传入的是指针,所以可以改变原来的数。而且使用这样的方式可以不借助中间变量完成交换。
发表于 2017-09-28 16:30:30 回复(0)
a=a+b;
b=a-b;
a=a-b;可以实现对a、b的交换,所以答案就出来了。
本回答的意义是:考虑a、b的数值都比较大时,这种做法可能出现超界。因此最佳方法可以用以下式子达到交换目的:
a=a^b;//进行按位异或运算
b=a^b;
a=a^b;

编辑于 2016-09-17 23:18:52 回复(0)
B foo()函数的作用是交换数值
发表于 2015-04-02 13:09:46 回复(0)
交换的两种写法
void Swap(int &x.int &y)
{
    int temp=x;
    x=y;
    y=x;
}
void Swap(int* x,int* y){
    *x=*x+*y;
    *y=*x-*y;
    *x=*x-*y;
}
牢记


发表于 2019-08-13 13:38:29 回复(0)
贾!j;90 x 4088 th 一拳9 gn 69 166.. f:n用74 5 2 81.
发表于 2019-06-22 16:04:40 回复(0)

考完题目

发表于 2019-04-14 00:20:23 回复(0)
foo函数为地址转换, 设a地址为3,b地址为5 第一条语句:*a被给到新地址A, 此时A=3+5=8 第二条语句:*b=A-*b=8-5=3,为原*a地址,新*b为3 第三条语句:*a=A-*b=8-3=5,为原*b地址 交换完成。
发表于 2019-03-12 09:35:14 回复(0)
foo函数的功能其实就是交换参数的两个值。可以将式子进行代换就得到结果了。
发表于 2018-09-07 12:37:45 回复(0)
foo函数实现a和b的值的交换
发表于 2018-05-11 13:36:55 回复(0)
6
发表于 2018-05-10 20:34:46 回复(0)
b
发表于 2018-03-19 00:21:11 回复(0)
函数的代表ab值交换顾结果是2
发表于 2018-02-04 14:51:33 回复(0)
foo函数的作用是交换两个整数的值,所以应该选B
发表于 2018-01-25 21:47:12 回复(0)
b 交换函数
编辑于 2017-04-10 15:32:31 回复(0)
B看程序,函数的含义为两个参数交换值,所以ab互换2,1bc互换31ca互换1,2所以结果为1,3,2
发表于 2017-04-02 22:58:48 回复(0)
第一句 a与b交换 b=1 a=2 第二句 b与c交换 c=1 b=3 第三句 c与a交换 a=1 c=2 最后结果 a=1 b=3 c=2
发表于 2017-03-09 08:54:38 回复(0)