То, что вы пытаетесь сделать, обычно опасно:
В returnAddress()
вы объявляете локальную нестатическую переменную i
в стеке.Затем вы возвращаете его адрес, который будет недействительным после возврата функции.Кроме того, вы пытаетесь вернуть char *
, в то время как у вас действительно есть int *
.
Чтобы избавиться от предупреждения, вызванного возвращением указателя на локальную переменную, вы можете использовать этот код:
void *p = &x;
return p;
Конечно, печать совершенно безвредна, но разыменование (например, int x = *ptr;
) может привести к сбою вашей программы.
Однако то, что вы делаете, - отличный способ сломать вещи - другие люди могутне знаю, что вы возвращаете неверный указатель, который никогда не должен быть разыменован.