黑马程序员技术交流社区

标题: 关于一个函数参数传递的问题 [打印本页]

作者: 变味的面包    时间: 2015-4-22 13:28
标题: 关于一个函数参数传递的问题
本帖最后由 变味的面包 于 2015-4-29 14:57 编辑

用c谢了一个不用第三方参数实现值交换的小程序:

#include<stdio.h>

//在不用引入其他变量的情况下,使用位异或^运算符实现两个变量值的互换
void exchange (int &a , int &b)
{

    //使用亦或交换
    a = a ^ b ;

    b = a ^ b ;

    a = a ^ b ;


}

int main()
{
    int a = 5, b = 6;

    printf("交换前 a = %d,b = %d",a ,b );

    exchange(a, b);

    printf("交换后 a = %d,b = %d",a ,b );

    return 0;
}

编译的时候出现以下错误:
位运算.c:8:20: error: expected ')'
void exchange (int &a , int &b)
                   ^
位运算.c:8:15: note: to match this '('
void exchange (int &a , int &b)
              ^
位运算.c:8:20: error: parameter name omitted
void exchange (int &a , int &b)
                   ^
位运算.c:12:5: error: use of undeclared identifier 'a'
    a = a ^ b ;
    ^
位运算.c:12:9: error: use of undeclared identifier 'a'
    a = a ^ b ;
        ^
位运算.c:12:13: error: use of undeclared identifier 'b'
    a = a ^ b ;
            ^
位运算.c:14:5: error: use of undeclared identifier 'b'
    b = a ^ b ;
    ^
位运算.c:14:9: error: use of undeclared identifier 'a'
    b = a ^ b ;
        ^
位运算.c:14:13: error: use of undeclared identifier 'b'
    b = a ^ b ;
            ^
位运算.c:16:5: error: use of undeclared identifier 'a'
    a = a ^ b ;
    ^
位运算.c:16:9: error: use of undeclared identifier 'a'
    a = a ^ b ;
        ^
位运算.c:16:13: error: use of undeclared identifier 'b'
    a = a ^ b ;
            ^
位运算.c:27:18: error: too many arguments to function call, expected 1, have
      2
    exchange( a, b );
    ~~~~~~~~     ^
位运算.c:8:1: note: 'exchange' declared here
void exchange (int &a , int &b)
^

12 errors generated.



额  这个报错  我没大看明白 哪里的原因 小伙伴们帮帮忙


作者: 变味的面包    时间: 2015-4-22 13:39
有木有交流一下的啊~
作者: itheima_llt    时间: 2015-4-22 14:52
继续关注一下这方面的信息
作者: 变味的面包    时间: 2015-4-22 15:06
变味的面包 发表于 2015-4-22 13:39
有木有交流一下的啊~

额  用指针就搞定了  但是这个就不行  不知道是什么原因
作者: 人生充满期待    时间: 2015-4-22 15:51
首选你这个就设计到一个作用域的问题
作者: 人生充满期待    时间: 2015-4-22 15:54
int 后面应该不能跟地址 int &a 这个写法对么?
作者: 人生充满期待    时间: 2015-4-22 16:11
我也迷糊了,大神来终结下
作者: 人生充满期待    时间: 2015-4-22 16:17
终于搞定了,想了半天
  1. #include <stdio.h>

  2. void change(int *n1,int *n2)
  3. {
  4.     *n1=*n1^*n2;
  5.     *n2=*n1^*n2;
  6.     *n1=*n2^*n1;
  7. }



  8. int main()
  9. {
  10.     int a=5;
  11.     int b=4;
  12.     change(&a,&b);
  13.     printf("a=%d,b=%d\n",a,b);
  14. }
复制代码

作者: 人生充满期待    时间: 2015-4-22 16:19
int 不能存储地址,如果不写地址的话 又设计到作用域,经过函数exchange之后并不能改变main中 a 和b的值,所以必须用到指针
作者: 人生充满期待    时间: 2015-4-22 16:23
按楼主的题目,应该是这样写


  1. #include<stdio.h>

  2. //在不用引入其他变量的情况下,使用位异或^运算符实现两个变量值的互换
  3. void exchange (int *a , int *b)
  4. //设计到用函数改变主程序中变量的值,这里要用到指针
  5. {
  6.    
  7.     //使用亦或交换
  8.     *a = *a ^ *b ;
  9.    
  10.     *b = *a ^ *b ;
  11.    
  12.     *a = *a ^ *b ;
  13.    
  14.    
  15. }

  16. int main()
  17. {
  18.     int a = 5, b = 6;
  19.    
  20.     printf("交换前 a = %d,b = %d",a ,b );
  21.    
  22.     exchange(&a, &b);
  23.     //把a 和 b的地址传输到指针函数中去
  24.    
  25.     printf("交换后 a = %d,b = %d\n",a ,b );
  26.    
  27.     return 0;
  28. }
复制代码

作者: 人生充满期待    时间: 2015-4-22 16:24
人生充满期待 发表于 2015-4-22 16:19
int 不能存储地址,如果不写地址的话 又设计到作用域,经过函数exchange之后并不能改变main中 a 和b的值,所 ...

而且在使用到exchange函数的时候,传入进去的不是地址,而是a和b的值。
作者: 变味的面包    时间: 2015-4-22 20:22
人生充满期待 发表于 2015-4-22 16:24
而且在使用到exchange函数的时候,传入进去的不是地址,而是a和b的值。

根据   《彻底搞定 C 指针》 第伍篇 函数参数的传递 里面的函数参数传递方式之三:引用传递  我写的那个代码应该是可以的那:
请看一下代码:

void Exchg3(int &x, int &y) /* 注意定义处的形式参数的格式与 值传递不同 */
{
        int tmp = x;
         x = y;
         y = tmp;
         printf("x = %d, y = %d.\n", x, y);
}
main()
{
     int a = 4;
     int b = 6;
     Exchg3(a, b); /*注意:这里调用方式与值传递一样*/
         printf("a = %d, b = %d.\n”, a, b);
    }
输出结果:
x = 6, y = 4.
a=6,b=4. /*这个输出结果与值传递不同。*/
作者: 变味的面包    时间: 2015-4-22 21:17
本帖最后由 变味的面包 于 2015-4-22 21:18 编辑

我想问   你们是怎么插入的那些代码可以那样显示?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2