12.3. Предаване на параметри между подпрограмите При подпрограмите могат да се различат три вида формални параметри: - параметри – входни данни, необходими за извършване на изчисленията; - параметри – резултати от изпълнението; - смесени параметри - в началото те съдържат входните данни, а след изпълнението в тях се записват резултатите. В езика С/С++ предаването на параметри между подпрограмата и главната програма може да се извърши по стойност и чрез адрес. • Предаване на параметри по стойност. Пример В този случай промяната на формалния параметър в подпрограмата не се отразява на съответния му фактически параметър. Така на подпрограмата /процедура или функция / се предават входните данни. Пример. Функцията funA изчислява произведението на две цели числа. Формалният параметър х, получил стойност от фактическия параметър a =5, претърпява промяна в блока на функцията : x=x+y; Това обаче не се отразява на стойността на a в главната програма:
• Предаване на параметри чрез адрес. Примери В този случай всяка промяната на формалния параметър в подпрограмата се отразява на съответния му фактически параметър. По този начин се връщат резултатите от изпълнението на процедурата. Смесените параметри, които в началото съдържат входните данни, а след изпълнение – резултатите, също се предават чрез адрес. За да се предадат параметрите чрез адрес е необходимо формалният параметър да бъде указател. В този случай съответният му фактически параметър трябва да бъде адрес на променлива. Пример: Процедурата swap разменя стойностите на две въведени цели числа. Проследете изпълнението чрез аплета: Фактическият параметър - адресът на a / & a/ се предава на формалния параметър - указателя х. Указателят y получава като стойност адреса на b. Помощната променлива pom взема стойността, сочена от указателя х, т.е. на а, променливата а взема стойността на b, променливата b взема стойността на pom. Параметрите могат да се предадат чрез адрес и когато формалният параметър се предшества от знака &. В този случай съответният му фактическият параметър трябва да бъде променлива: Пример:
В този пример, фактическият параметър B предава своята начална стойност 6 на формалния параметър А. Последният нараства с единица в процедурата, което се отразява на фактическия параметър B във функцията main. |