Практикум по информатике и информационным технологиям. I. Обработка данных на ПК

92 Чтобы отличать параметры подпрограммы, описанные в её заголовке и теле, от параметров, указываемых при вызове подпрограммы, первые приня­ то называть формальными параметрами, вторые - фактическими параметра­ ми. При вызове функции фактические параметры, указанные в команде вызо­ ва, становятся значениями соответствующих формальных параметров, чем и обеспечивается передача данных в функцию. В описании функции задается список формальных параметров. Каждый параметр, указанный в списке формальных параметров, является локальным по отношению к данной функции и в программном блоке функции на него можно ссылаться по его идентификатору (имени). Существует два способа передачи параметров внутрь функции: по зна­ чению и по ссылке. При передаче параметра по значению формальному пара­ метру функции присваивается копия значения фактического параметра. При этом все изменения формального параметра внутри функции никак не отра­ жаются на фактическом параметре. При передаче параметра по ссылке в качестве формального параметра передается адрес фактического параметра. Внутри функции этот адрес от­ крывает доступ к фактическому параметру. Это значит, что все изменения формального параметра будут отражаться на значении фактического пара­ метра. 10.2.2. Передача параметров по значению Формальный параметр-значение обрабатывается, как локальная по от­ ношению к процедуре или функции переменная, за исключением того, что он получает свое начальное значение из соответствующего фактического пара­ метра при активизации функции. Изменения, которые претерпевает фор­ мальный параметр-значение, не влияют на значение фактического параметра. Фактический параметр должен иметь тип, совместимый по присваи­ ванию с типом формального параметра-значения. По умолчанию в С++ используется передача по значению. В этом слу­ чае операторы, образующие тело функции, не могут изменять фактические параметры, указанные при ее вызове. Пример: #include <stdio.h> int sqr(intx); void main(void) { int t=10; printf("%d %d", sqr(t), t); } int sqr(int x) { x=x*x; return x; }

RkJQdWJsaXNoZXIy MTY0OTYy