- Текст –
Text
. - Инициализированные данные —
Initialized data
. - Неинициализированные данные —
Unitialized data
. - Куча –
Heap
. - Стек –
Stack
. - Переменные среды —
Environment variables
.

На прошлой лекции мы рассмотрели программу для нахождения куба числа. Приведём её код ещё раз:
#include <stdio.h>
int cube(int input); //Прототип функции cube
int main(void)
{
int x = 2;
printf("x is %i\n", x);
x = cube(x);
printf("x is %i\n", x);
}
int cube(int input)
{
int output = input * input * input;
return output;
}
И на её примере рассмотрим структуру стека:
- Локальные переменные
cube()
–cube()'s locals
- Параметры
cube()
–cube()'s parameters
- Локальные переменные
main()
–main()'s locals
- Параметры
main()
–main()'s parameters

Когда вы вызываете функцию, ее параметры и локальные переменные располагаются в стеке выше той функции, в которой ее вызвали (cube ()
расположена выше main ()
). Когда функция завершает работу, она передает результат функции, находится ниже в стеке.
Пример
Программа, меняет местами значения переменных x и y
#include <stdio.h>
int swap(int a, int b); //Прототип функции swap
int main(void)
{
int x = 1, y = 2;
swap(x, y);
printf("x is %i\n", x);
printf("y is %i\n", y);
}
void swap(int a, int b)
{
int tmp = a;
a = b;
b = tmp;
}
Эта программа не работает так, как вы ожидаете: переменные x
и y
в программе не меняются. Это происходит потому, что в функции передаются копии значений переменных. Наберите эту программу, посмотрите на результат, и подумайте, почему он именно такой.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ