Замена указателей в C (char, int)

Я изо всех сил пытался понять различное поведение при перестановке указателей в C.Если я хочу поменять местами два указателя int , я могу сделать

void intSwap (int *pa, int *pb){
    int temp = *pa;
    *pa = *pb;
    *pb = temp;
}

Однако, если я хочу поменять местами два указателя char , мне нужно сделать что-то вроде

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

, потому что если я do

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

компилятор жалуется на выражение * a = * b, поскольку оно не может изменить значения. Если я хочу поменять местами две строки (например, char * s1 = "Hello"; char * s2 = "Bye"; ), как бы это сделать?

Не могли бы вы помогите мне немного? Я действительно хотел бы узнать, как это работает, чтобы мне не приходилось постоянно сталкиваться с методом проб и ошибок, пока я не получу правильный ответ. Надеюсь, это пригодится многим другим.

32
задан Manolete 22 May 2015 в 14:50
поделиться