#include<stdio.h>
#include<stdlib.h>
char* re()
{
char *p = "hello";
return p;
}
int main()
{
char* tem = re();
printf("%s", tem);
return 0;
}
Мой компилятор - Dev-C++. Я думаю, что когда функция «re» завершается, указатель «p» будет удален, и пространство стека, которое указывает «p», также будет удалено. Таким образом, указатель «tem» не может посещать пространство стека, на которое указывает «p». На мой взгляд, в этом коде появятся некоторые ошибки. но почему нет?c язык и некоторые сомнения в указателе
Эта проблема искажает меня долгое время. Если вы можете сказать мне причину, я по достоинству оценю ваше доброе сердце.
Указатель p выйдет за рамки. Но его * значение * (то, на что оно указывает) будет возвращено вызывающему (основному). И это (значение) указывает на строковый литерал, который все еще существует после возврата re(). – wildplasser