Клуб на програмистите - - Ресурси на Delphi & C - Архив на блогове - УРОК 10 ПРОМЯНА СТОЙНОСТИ
Публикувано от ключ под c/c ++, Статии
В урок 9 научихте как да разделите програмите си на малки, лесно управляеми парчета, наречени функции. Както вече знаете, програмите могат да предават информация (параметри) на функциите. Представените в Урок 9 програми използват или показват стойности на параметрите, но не ги променят. В този урок ще научите как да промените стойността на параметър във функция. Ще откриете, че промяната на параметрите на дадена функция всъщност отнема повече стъпки, отколкото си мислите. Този урок обаче ви учи на всички стъпки, които трябва да знаете. До края на този урок ще усвоите следните основни понятия:
• Ако функцията не използва указатели или връзки, то не може да промени стойността на параметъра.
Промяната на стойността на параметър на функция е нормална операция. Експериментирайте с програмите, представени в този урок, за да сте сигурни, че овладявате напълно процеса.
ЗАЩО ФУНКЦИИТЕ НЕ МОГАТ ОБИЧАЙНО ДА ПРОМЕНЯТ ПАРАМЕТРИТЕ
Следващата програма NOCHANGE.CPP предава два параметъра с име голям и малък на функцията display_values. Функцията display_values от своя страна присвоява числото 1001 и на двата параметъра и след това извежда стойността на всеки параметър. Когато функцията приключи, програмата възобновява и извежда стойностите на същите параметри:
void display_values (int a, int b)
Стойности преди функцията 2002 и 0
Стойностите във функцията display_values са 1001 и 1001
Стойности след функция 2002 и 0
Както можете да видите, стойностите на параметрите във функцията display_values са променени (1001). След приключване на функцията обаче стойностите на големите и малките променливи в main остават същите. За да разберете защо промяната на параметрите не е повлияла на големите и малките променливи основно, трябва да разберете как C ++ предава параметрите на функциите.
Когато вашите програми предават параметър на функция, по подразбиране C ++ прави копие на стойността на параметъра и поставя това копие във временно парче памет, наречено стек. След това функцията използва копието на стойността, за да изпълнява своите операции. Когато функцията излезе, C ++ изтрива съдържанието на стека и всички промени, направени от функцията, в копия на стойностите на параметрите.
Както знаете, променлива е име, което вашата програма присвоява на място в паметта, което съхранява стойност от определен тип. Да предположим например, че големите и малките променливи са в местата с памет 10 и 12. Ако предадете променливи на display_values, C ++ ще избута копия на стойностите на тези променливи в стека. На фиг. 10.1 показва, че функцията display_values след това ще използва копия на стойностите на променливите.