указатели — Обмен двух строк в переполнении стека

При чем тут аргументы (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;
}

-6

Решение

При чем тут аргументы (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

0

Другие решения

При чем тут аргументы (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 внутри функции подкачки?

Тогда вы поменяете два chars вместо двух указателей на char

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector