, когда я пытаюсь использовать следующий код в visual studio, мне дают 45, но когда я запускаю его в онлайн-компиляторах, некоторые дают мне ошибку, а некоторые дают мне 0. Я ожидал, что все они дадут мне ошибку. как это они? благодарялокальные переменные в C
#include <stdio.h>
int *f(int *a)
{
*a = 23;
int b = 45;
return &b;
}
int main(void)
{
int i = 2;
int *p;
p = f(&i);
printf("The return value of function f: %d\n\n", *p);
return 0;
}
Вы возвращаете ссылку на выделенную стекю переменную - это ** очень * * Плохо!! Не делайте этого, это может вызвать массу неприятных скрытых ошибок. – UnholySheep
Даже если вы получаете правильное значение в визуальной студии, это неправильно. Вы не получаете никакой ошибки, так как возвращаемый тип функции - int *, и вы возвращаете int *. – MayurK
@MayurK Просто потому что re is * no * правильное значение .. –