Информатика и технология программирования


Ссылка (неявный указатель) - часть 4




-значением;



-обычным указателем;



-ссылкой.


//------------------------------------------------------bk72-01.cpp


//--------------------------------------------------------


// 1. Параметр и результат - значения


//--------------------------------------------------------


struct dat { int day,month,year; };
// Эквивалент


dat Inc(dat x) // void Inc( dat x, dat *pout)


{ // {


x.day++; // x.day++;


return x; // *pout = x;}


} //


void main() //


{ //


dat a,b,*p; //


a = Inc(Inc(b)); // dat tmp1; Inc(x=b,&#38tmp1);


p = &#38Inc(b); // dat tmp2; Inc(x=tmp1; &#38tmp2);


a = *p; // dat tmp3; Inc(Inc(x=b,&#38tmp3);


} // p = &#38tmp3; a = *p;


//-------------------------------------------------------


// 2.Параметр и результат - указатели


//-------------------------------------------------------


struct dat { int day,month,year; };


dat* Inc(dat* x) //


{ //


x-&#62day++; //


return x; //


} //


void main() //


{ //


dat a,b,*p; //


a = *Inc(Inc(&#38b)); //


p = Inc(&#38b); //


a = *p; //


} //


//-------------------------------------------------------


// 3. Параметр и результат - ссылки


//-------------------------------------------------------


struct dat { int day,month,year; };


dat&#38 Inc(dat&#38 x) // Эквивалент


{ // dat *Inc(dat *px)


x.day++; // { (*px).day++;


return x; // return px;}


} //


void main() //


{ //


dat a,b,*p; //


a = Inc(Inc(b)); // dat *pp; pp=Inc(&#38b); a=*Inc(pp);


p = &#38Inc(b); // p = Inc( &#38b) ;


a = *p; // a = *p;


} //


Сравнение этих примеров показывает следующее:



-примеры со ссылками и указателями идентичны по реализации, но отличаются по синтаксису вызова функции;



-примеры со значениями и ссылками отличаются по реализации, но идентичны по синтаксису вызова функции.



-после введения понятия ссылки список фактических параметров при вызове функции недостаточен для определения транслятором способа их передачи (значением или ссылкой), поэтому в Си++ для каждой внешней функции необходимо объявлять ее прототип.




Начало  Назад  Вперед



Книжный магазин