Понимание указателей и локальной области видимости [дубликат]

На этот вопрос уже есть ответ здесь:

Как получить доступ к локальной переменной из другой функции, используя указатели? 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 *)?

Ответы на вопрос(0)

Ваш ответ на вопрос