Zamiana wskaźników na char[]

0

Witam,
chciałbym dokonać zamiany dwóch tablic w funkcji. Chciałem to zrealizować poprzez krzyżową zamianę adresów na które wskazują wskaźniki i tak:

void rev(char a[], char b[]){
char * temp=a;
a=b;
b=temp;
cout<<a<<endl;
cout<<b<<endl;
}

Następnie w main():

char a[]="aaa";
char b[]="bbbb";
rev(a,b);
cout<<a<<endl;
cout<<b<<endl;

Efekt jest taki, że w funkcji rev rzeczywiście dochodzi do zamiany kolejności ("bbb" , "aaa"), jednak gdy program wraca do main zmiana jest już niewidoczna. Czy mógłby ktoś mi wytłumaczyć gdzie popełniam błąd i jak go naprawić czyli zrobić tak, żeby wskażniki w main na stałe pokazywały "na krzyż"?

0

zamiast void rev(char a[], char b[]) użyj void rev(char*& a, char*& b)
tak a propos to twoja funkcja robi to samo co funkcja swap

0

Tylko że na tablicach tego nie zrobisz, a i b musiałoby być typu const char* (a funkcja void rev(const char*& a, const char*& b)).

0

Właśnie o to mi chodzi, żeby zrobić to na łańcuchach znaków. Jest może jakieś inne rozwiązanie?

0

Ale to wciąż jest na łańcuchach znaków, tylko nie w tablicach. Tablice musiałbyś kopiować z jednej do drugiej i z powrotem, w dodatku obie musiałyby mieć ten sam rozmiar (bo przy kopiowaniu większej do mniejszej wyjechałbyś poza zakres).

void rev(const char*& a, const char*& b) {
    const char* temp = a;
    a = b;
    b = temp;
}

const char* a = "aaa";
const char* b = "bbb";

rev(a, b);

cout << a << endl;
cout << b << endl;

Albo:

void rev(char*& a, char*& b) {
    char* temp = a;
    a = b;
    b = temp;
}

char a[] = "aaa";
char b[] = "bbb";

char* ap = a;
char* bp = b;

rev(ap, bp);

cout << ap << endl;
cout << bp << endl;

1 użytkowników online, w tym zalogowanych: 0, gości: 1