A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 变味的面包 于 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.



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

12 个回复

倒序浏览
有木有交流一下的啊~
回复 使用道具 举报
继续关注一下这方面的信息
回复 使用道具 举报
变味的面包 发表于 2015-4-22 13:39
有木有交流一下的啊~

额  用指针就搞定了  但是这个就不行  不知道是什么原因
回复 使用道具 举报
首选你这个就设计到一个作用域的问题
回复 使用道具 举报
int 后面应该不能跟地址 int &a 这个写法对么?
回复 使用道具 举报
我也迷糊了,大神来终结下
回复 使用道具 举报
终于搞定了,想了半天
  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. }
复制代码
回复 使用道具 举报
int 不能存储地址,如果不写地址的话 又设计到作用域,经过函数exchange之后并不能改变main中 a 和b的值,所以必须用到指针
回复 使用道具 举报
按楼主的题目,应该是这样写


  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:19
int 不能存储地址,如果不写地址的话 又设计到作用域,经过函数exchange之后并不能改变main中 a 和b的值,所 ...

而且在使用到exchange函数的时候,传入进去的不是地址,而是a和b的值。
回复 使用道具 举报
人生充满期待 发表于 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:18 编辑

我想问   你们是怎么插入的那些代码可以那样显示?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马