@014

Почему не происходит перестановки указателей?

#include <iostream>
#include <cstring>
#include <cstdlib>

using namespace std;

void sort(const char *, const char *);
int main()
{
    const char *str[2] = {"test", "array"};
    
    cout<<str[0]<<endl;
    cout<<str[1]<<endl;

    sort(str[0], str[1]);

    cout<<str[0]<<endl;
    cout<<str[1]<<endl;


    system("pause");
    return 0;
}

void sort(const char *ch1, const char *ch2)
{
  const char *temp = ch1;
    ch1 = ch2;
    ch2 = temp;
}


как было:
test
array

так и осталось, перестановки не произошло. Подскажите почему так происходит.
  • Вопрос задан
  • 138 просмотров
Решения вопроса 2
petermzg
@petermzg
Самый лучший программист
Перестановка то происходит, только локально внутри функции sort.
Т.е. вы аргументам функции присвоили значения указателей, и значения агрументов между собой обменяли.
Ответ написан
@teugen
Призрак алкоголизма.
Потому что указатели передаются по значению. Чтобы работало должным образом, нужно немного подправить сигнатуру функции:
void sort(const char*& ch1, const char*& ch2)
{
    ...
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы