参数(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;
}
答案 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