【问题标题】:Out parameters in CC中的输出参数
【发布时间】:2012-02-27 00:10:39
【问题描述】:
void swap(int &first, int &second){
    int temp = first;
    first = second;
    second = temp;
}
int a=3,b=2;
swap(a,b);

编译器抱怨void swap(int &first, int &second) 有语法错误。为什么? C 不支持引用吗?

【问题讨论】:

  • 异或交换等属于 IOCCC,不在实际代码中或作为对初学者的建议。

标签: c parameters pass-by-reference out-parameters


【解决方案1】:

对于整数交换,您可以在没有局部变量的情况下使用此方法:

int swap(int* a, int* b)
{
    *a -= *b;  
    *b += *a;  
    *a = *b - *a; 
}

【讨论】:

  • 应该是void swap(int* a, int* b) 以避免warning: control reaches end of non-void function (在交换之前检查if (*a != *b) 永远不会有害...)
  • 请,哦,请不要使用这个。除了返回类型不正确,并且比带有临时变量的类型更难阅读之外,它几乎在每个架构上都更慢。唯一的第三个可变成本是临时寄存器。
【解决方案2】:

C 不支持通过引用传递。因此,您将需要使用指针来完成您想要实现的目标:

void swap(int *first, int *second){
    int temp = *first;
    *first = *second;
    *second = temp;
}


int a=3,b=2;
swap(&a,&b);

我确实推荐这个:但为了完整起见,我会添加它。

如果您的参数没有副作用,您可以使用宏。

#define swap(a,b){   \
    int _temp = (a); \
    (a) = _b;        \
    (b) = _temp;     \
}

【讨论】:

    【解决方案3】:

    C 不支持通过引用传递;这是一个 C++ 特性。您必须改为传递指针。

    void swap(int *first, int *second){
        int temp = *first;
        *first = *second;
        *second = temp;
    }
    
    int a=3,b=2;
    swap(&a,&b);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 2011-10-22
      • 2014-07-10
      • 1970-01-01
      相关资源
      最近更新 更多