Изменение адреса указателя - функция
У меня проблема с указателями. Это работает нормально -
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;
}
Вы увеличиваете копию, которая является локальной для функции.