Понимание указателей и локальной области видимости [дубликат]
На этот вопрос уже есть ответ здесь:
Как получить доступ к локальной переменной из другой функции, используя указатели? 9 ответовПредположим, у меня есть следующие функции:
char* allocateMemory()
{
char str[20] = "Hello world.";
return str;
}
int* another()
{
int x = 5;
return &x;
}
int _tmain(int argc, _TCHAR* argv[])
{
char* pString = allocateMemory();
printf("%s\n", pString);
int* blah = another();
printf("%d %d \n", blah, *blah);
return 0;
}
Первый printf печатает случайные значения, потому что str IS LOCAL SCOPE.
Второй printf печатает правильные значения, с бла = адрес бла, * бла = 5
Почему локальная область действия влияет только на allocateMemory, которая работает с массивами, но не с целым числом?
Почему первый printf (возвращающий char *) печатает случайные значения и зависит от локальной области видимости, но не второй (возвращающий int *)?