通过引用实际调用在c ++中交换两个指向char的指针

时间:2014-02-14 17:11:47

标签: c++

我试图用真正的call-by-reference交换const char上的两个点。但我有问题。

void swap(const char *&str1, const char *&str2) { //swap char pointers
    const char *one = str1;
    str1 = str2;
    str2 = one;
}

int main(void){
    const char *str1 = "Apple";
    const char *str2 = "Potato";
    swap(*str1, *str2);
    return 0.0;
}

我继续收到此错误:

  

从'char'无效转换为'const char'

3 个答案:

答案 0 :(得分:3)

调用swap时,不应该取消引用指针。你需要打电话:

swap(str1, str2);

或者,更好的是,使用std::swap

此外,如果您尝试运行您编写的代码,则需要原型swap或交换函数:

void swap(const char *&str1, const char *&str2) 
{ 
  const char *one = str1;
  str1 = str2;
  str2 = one;
}    

int main(void)
{
  const char *str1 = "Apple";
  const char *str2 = "Potato";
  swap(str1, str2);

  return 0;
}

此外,main返回一个int,而不是float

答案 1 :(得分:3)

您应该使用std::swap(位于<algorithm><utility>标题中),而不是自己滚动:

std::swap(str1, str2);

此外,您应该考虑使用std::string代替const char*

std::string str1 = "Apple";
std::string str2 = "Potato";

当然std::swap算法仍然可以正常工作。

最后,在C ++中,voidmain的参数列表中的return 0.0都不是必需的。

以下是使用上述建议重新审视的代码:

#include <algorithm>
#include <string>
#include <iostream>

int main() {
    std::string str1 = "Apple";
    std::string str2 = "Potato";
    std::swap(str1, str2);
}

here是实例。


在回答Cthulhu先生的问题时,我会尝试更明确地回答这个问题。

您的错误是由于通过解除引用const char*类型的指针,您实际上得到了const char&类型的表达式,这显然与您swap中表达的类型不兼容功能。这是对函数的正确调用:

swap(str1, str2);

但又一次,为什么要复制std::swap的代码? (这是一个修辞问题,如果你想知道这是“不是答案”)

答案 2 :(得分:0)

您在调用之后定义swap() 。在C ++中,应该在调用函数之前定义函数。将swap()的定义移至文件顶部main()上方。然后您将收到此错误:

test.cpp:11: warning: converting to ‘int’ from ‘double’

您的main()函数应该返回0int),而不是0.0 double

解决这个问题,你最终会收到这个错误:

test.cpp: In function ‘int main()’:
test.cpp:10: error: invalid initialization of reference of type ‘const char*&’ from expression of type ‘const char’
test.cpp:1: error: in passing argument 1 of ‘void swap(const char*&, const char*&)’

这是因为您将您的参数解除引用swap()。删除*,程序现在可以正常工作。

,您只需完全删除swap()功能#include <utility>,然后使用std::swap()