Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中交换两个字符串+;_C++_Pointers_Reference - Fatal编程技术网

C++ 在C+中交换两个字符串+;

C++ 在C+中交换两个字符串+;,c++,pointers,reference,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; }

交换函数中的参数(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;
}
#包括
使用名称空间std;
无效交换(字符*&str1、字符*&str2)
{
char*temp=str1;
str1=str2;
str2=温度;
}
int main()
{
char*str1=“极客”;
char*str2=“适用于极客”;
交换(str1、str2);
库特
交换函数中的参数(char*&str1、char*&str2)指定了什么

#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;
}
它们指定此函数接受两个指向
char
指针的引用。如果有疑问,请使用
typedef
(至少在您的头脑中):

如果它们在交换函数中被(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;
}
然后您将交换两个
char
s,而不是两个指向
char

交换函数中的参数(char*&str1、char*&str2)指定了什么

#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;
}
它们指定参数为指向char的指针的引用类型。这意味着该函数可能会更改作为该函数参数提供的变量的值

如果它们在交换函数中被(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;
}
然后您将得到编译器错误,因为您仍然会像这样调用它:
swap(str1,str2);
,您必须将调用更改为
swap(*str1,*str2);
,然后您将交换两个字符串的第一个字母

[编辑]

您的代码还包含另一个细微错误,您使用
使用名称空间std;
,当您将
swap
函数签名更改为
void swap(char&str1,char&)
时,会调用
std::swap

您还应该看到警告,如:

Copy:CP:17:14:警告:ISO C++禁止将字符串常量转换成“char *”[ Wpedantic ] char*str1=“极客”


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

您认为此函数做什么,如果它是char&Danger,您认为它应该做什么:
char*str1=“GEEKS”
“GEEKS”
const char*
而不是
char*
您应该有一个编译器警告,建议您不要这样做。如果您修改指针上的内容而不是仅仅交换指针,将导致未定义的行为。替换为char&将产生相同的输出。为什么有必要将类型声明为指向ref的指针引用(char*&str1)@UKMonkey“指向引用的指针”-不,反过来说-引用指针。当您将指针传递到函数中时,您可以修改指针处的数据,并且由于调用方和函数都在查看同一位置,因此都会看到更改。但是,传递到函数中的指针仅是复制的。如果更改副本指向的位置,则调用方将我不知道。调用者有原始的,而原始的是不变的。对指针使用a引用意味着调用者和函数都使用同一个指针,非常类似于最初的指针。请阅读pass-by-reference和pass-by-value。我没有得到任何编译错误,相反,我得到的是字符串pe的相同输出完全交换@Marcinj@SrinathThumati您确定生成了代码并且没有运行上次生成程序时创建的可执行文件吗?如果您能确认确实生成了该代码,请告诉我们您使用了什么编译器以及设置了什么错误和警告级别。尝试将
char*
填充到
char应该让编译器尖叫并拒绝编译。@SrinathThumati这是因为您正在调用std::swap,这就是模板,这也是为什么您永远不应该使用命名空间std使用
@user4581301,我用在线IDE、Geeksforgeks IDE和ideone IDE编译代码。您说执行此代码是因为在这些在线编译器中设置的错误或警告级别?@Marcinj您是对的。我认为命名空间std的效果只有在我将它们与关键字std::感谢您的回复:)一起使用时才会产生。)