Изменение адреса указателя - функция

У меня проблема с указателями. Это работает нормально -

int main(void){
    char *w;
    w = calloc(20, sizeof(char));
    w = "ab";

    printf("%c",*w);
    w = w + sizeof(char);
    printf("%c",*w);

    return 0;
}

но если я использую функцию как:

void por(char *t){
    t = t + sizeof(char);
}

а также

int main(void){
    char *w;
    w = calloc(20, sizeof(char));
    w = "ab";
    printf("%c",*w);
    por(w);
    printf("%c",*w);

    return 0;
}

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

3 ответа

Решение

В вашей функции por, t не изменится. Вы должны изменить это

void por(char **t){
 *t = *t + sizeof(char);
}

и назовите это с помощью por(&w)

Попробуй это:

static char *por(char *t)
{
    return t + sizeof(char);
}

int main(void)
{
    char *w = "ab";
    printf("%c",*w);
    w = por(w);
    printf("%c",*w);

    return 0;
}

Вы увеличиваете копию, которая является локальной для функции.

Другие вопросы по тегам