скрытое меню

ОСНОВНЫЕ МОМЕНТЫ

Отличаем ссылки и указатели

*xxx - значение, xxx - адрес
&xxx - адрес , xxx - значение

Главное это память. Стек и куча.

Куча - это когда new (C++) или malloc (C) - создание объектов в глобальной памяти и доступной из любого места кода программы.

Все остальное это стэк (или как еще называют автономная память). Вот тут все интереснее:

Главное , что все компилируется строго в одно фиксированное место в памяти :

int y=0;
int fff() // адрес 0; 
{
   y=1;
}
int main() 
{ 
   int i=9;  // адрес 1
   fff();    // адрес 2
   fff();    // адрес 3
}


переменная i, а также функция fff размещаются строго в одном месте памяти.
А дальше происходит примерно следующее:
Указатель на текущую инструкцию программы увеличивается на единицу и выполняется программа. Но когда доходим до вызова функции, то текущая позиция (адрес 2) сохраняется в стеке и происходит переход на позицию функции (адрес 0) и выполнение кода начинается с адреса 0. Когда возвращаемся из функции , то просто вынимаем из стека адрес 2 и переходим к следующему за ним адресу 3.

Смысл функции - в многократно повторяющемся наборе одних и тех же операций. Почему мы не можем обратиться из функции fff к переменной i в main? На самом деле можно было бы, т.к. компилятор знает четко где адрес лежит i (адрес 1). Но , чтобы не путаться (и это правильно) удобнее разрешить каждой функции внутри себя именовать свои переменные как ей удобно. Просто чтобы не париться с придумыванием новых названий переменных.

Яндекс.Метрика