При чем тут аргументы (char * &str1, char * &str2) указать в функции подкачки? Что делать, если они заменены на (символ &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 * &str1, char * &str2) указать в функции подкачки?
они указывают, что параметры имеют тип ссылки на указатель на символ. Это означает, что функция может изменить значение переменной, предоставленной в качестве аргумента этой функции.
Что делать, если они заменены на (символ &str1, char &str2) и char * temp = str1 с символом char &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
При чем тут аргументы (char * &str1, char * &str2) указать в функции подкачки?
Они указывают, что эта функция принимает 2 ссылки на указатели на char
, Если сомневаетесь, используйте typedef
(по крайней мере, в вашей голове):
typedef char * pchar;
void swap( pchar &str1, pchar &str2 );
Что делать, если они заменены на (символ &str1, char &str2) и char * temp = str1 с символом char &temp = str1 внутри функции подкачки?
Тогда вы поменяете два char
s вместо двух указателей на char