Изменение адреса указателя - функция - PullRequest
0 голосов
/ 15 ноября 2011

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

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 ]

4 голосов
/ 15 ноября 2011

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

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

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

1 голос
/ 15 ноября 2011

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

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;
}
0 голосов
/ 15 ноября 2011

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

...