【发布时间】:2016-10-11 17:10:19
【问题描述】:
参数 (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;
}
【问题讨论】:
-
你认为这个函数是做什么的,如果是char&你认为它应该做什么
-
这里的危险:
char *str1 = "GEEKS";"GEEKS"是const char *而不是char *你应该有一个编译器警告,建议你不要这样做。如果您修改指针处的内容而不是仅仅交换指针,则会导致未定义的行为。 -
替换为 char& 产生相同的输出。为什么需要将类型声明为指向引用的指针 (char * &str1) @UKMonkey
-
“指向引用的指针” - 不,其他方式 - 引用指针。
-
当您将指针传递给函数时,您可以修改指针处的数据,并且由于调用者和函数都在查看相同的位置,因此两者都会看到变化。但是,传递给函数的指针只是被复制。如果您更改副本指向的位置,调用者将不知道。调用者有原件,原件不变。使用对指针的引用意味着调用者和函数都使用相同的指针,这与最初的指针非常相似。阅读引用传递和值传递。