То, что у вас было, это
void func(char *p)
{
int q = 13;
p = &q;
}
Это означает «сделать p точкой для q» и изменить значение p
, которое является просто переменной внутри функции.Изменения значений переменных не отражаются вне функции.
Если бы вы написали это
void func(char *p)
{
int q = 13;
*p = q;
}
Это означало бы "сделать переменную, на которую указывает p
, изменить ее значение на 13"и это будет видно снаружи, это означает, что переменная var
в main изменит свое значение (зависит от того, каким будет порядок байтов, поскольку это int, а не char, как утверждает указатель).
ЕслиВы хотите изменить значение указателя в main, вам нужен двойной указатель:
void func(char **p)
{
int q = 13;
*p = &q;
printf("%d\n", *p);
}
Это будет означать «создать указатель, на который p
указывает, чтобы указать на локальную переменную q
», и в этомВ этом случае у вас будет висячий указатель, как и ожидалось в main
.