Причина, по которой вы не получаете предупреждение в первом фрагменте, заключается в том, что вы (с точки зрения компилятора) не возвращаете адрес локальной переменной.
Вы возвращаете значение int * temp
. Даже если эта переменная может (и в этом примере) содержать значение, являющееся адресом локальной переменной, компилятор не пойдет вверх по стеку выполнения кода, чтобы увидеть, так ли это.
Примечание : Оба фрагмента одинаково плохи, даже если ваш компилятор не предупреждает вас о первом. Не используйте этот подход.
Вы всегда должны быть осторожны при возврате адресов локальным переменным; как правило, можно сказать, что вы никогда не должны.
static
переменные - это совершенно другой случай, который обсуждается в этой теме .