В контексте того, что написано в этой статьепеременные в стеке и Heap
http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html#sec-6
Ключ к пониманию стек является понятие, что когда функция выходит, все его переменные извлекаются (и, следовательно, потеряны навсегда). Таким образом, переменные стека являются локальными по своей природе.
Таким образом, все переменные, которые принадлежат к этой функции в стеке выталкивается, за исключением может быть значение, которое возвращается к функции (или, может быть перераспределены для родительской функции?), Или если она не статична ,
Но эта конкретная программа работает полностью нормально.
#include<stdio.h>
int* func()
{
int a=6;
int *b;
b=&a;
printf("in func - %d \n",*b);
return b;
}
void func2()
{
int a,c;
a=99;
c=2*a;
printf("in func 2 - %d \n",c);
}
void main()
{
int *b;
b=func();
func2();
printf("in main - %d",*b);
}
Выход:
C:\Users\Shaurya\Desktop>gcc asw.c
C:\Users\Shaurya\Desktop>a
in func - 6
in func 2 - 198
in main - 6
C:\Users\Shaurya\Desktop>
Я полагал, переменные, которые распределены пользователем (с помощью calloc, таНос, перераспределить) доступен для других функций, потому что они находятся в куче, как говорится в статье. Но если мы сделаем указатель на локальную переменную, находящуюся в стеке, и вернем этот указатель, то и переменная будет доступна в другой функции.
Никогда. Когда-либо. Сказать. «Совершенно точно». –
Попробуйте вызвать другую функцию между вызовами 'func' и' printf'. –
Один из моих любимых: http://stackoverflow.com/a/6445794/1382251 –