用C ++交换两个字符串

时间:2016-10-11 17:10:19

标签: c++ pointers reference

参数(char *& str1,char *& str2)在交换函数中指定了什么?如果它们被替换为(char& str1,char& str2)和char * temp = str1以及交换函数中的char& temp = str1会怎样?

#include<iostream>
using namespace std;

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

int main()
{
char *str1 = "GEEKS";
char *str2 = "FOR GEEKS";
swap(str1, str2);
cout<<"str1 is "<<str1<<endl;
cout<<"str2 is "<<str2<<endl;
return 0;
}

2 个答案:

答案 0 :(得分:0)

  

参数(char *&amp; str1,char *&amp; str2)在交换函数中指定了什么?

它们指定此函数接受对char指针的2个引用。如果有疑问,请使用typedef(至少在你脑海中):

typedef char * pchar;
void swap( pchar &str1, pchar &str2 );
  

如果它们被替换为(char&amp; str1,char&amp; str2)和char * temp = str1以及交换函数中的char&amp; temp = str1会怎样?

然后你将交换两个char而不是两个指向char

的指针

答案 1 :(得分:0)

  

参数(char *&amp; str1,char *&amp; str2)在交换函数中指定了什么?

它们指定参数是指向char的指针的类型引用。这意味着函数可能会更改作为此函数的参数提供的变量的值。

  

如果它们被替换为(char&amp; str1,char&amp; str2)和char * temp = str1以及交换函数中的char&amp; temp = str1会怎样?

然后你会遇到编译器错误,因为你仍然会调用它:swap(str1, str2);,你必须将调用更改为swap(*str1, *str2);,然后你将交换两个字符串的第一个字母。

[编辑]

您的代码还包含另一个细微错误,您使用using namespace std;会导致std::swap功能签名更改为swap时调用void swap(char &str1, char &)

您还应该看到像这样的警告:

  

main.cpp:17:14:警告:ISO C ++禁止将字符串常量转换为'char *'[-Wpedantic]    char * str1 =“GEEKS”;

这是因为字符串文字是常量指针,否则你会在代码中引入UB。您应该更改为const char *str1