MyTetra Share
Делитесь знаниями!
Запчасти для японских грузовиков в москве узнать больше.
Смотрите http://norma-life.ru/katalog/test-poloski тест полоски на глюкозу, zakaz.
Передача параметров в функцию по указателю
05.04.2010
14:40
Автор: Xintrea
Раздел: Компьютер - Программирование - Язык C

Передача через ссылку


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


Если передавать значения через ссылку, код функции выглядит так:


mul5(int *x)

{

*x = *x * 5;

}


Вызов:


int var=10;

mul5(&var);


Такой синтаксис неудобен. Внутри функции перед переменной, которая является ссылкой, приходится ставить * для получения её значения. И при вызове функции приходится перед именем переменной ставить & для того, чтобы передать ссылку на переменную (по сути, адрес).



Передача через указатель


Если передавать через указатель, код функции выглядит так:


mul5(int &x)

{

x = x * 5;

}


А вызов выглядит:


int var=10;

mul5(var);


Видно, что никаких разыменовываний указателей в функции, и передачи адреса переменной в таком вызове функции не требуется.



Однако, следует помнить, что такая передача по указателю возможна только для базовых типов и стандартных объектов в C/C++. И не работает для передачи массивов!



Поэтому, если, к примеру, функция принимает:

  • одномерный массив block, элементы которого надо изменить внутри функции (это сложный/составной тип)
  • целочислительную переменную shift, которую тоже надо изменить внутри функции (это базовый тип)

то реализация функции будет выглядеть так:


void clear(unsigned char *block, int &shift)

{

block[shift]=0;

shift++;

}



Вызов такой функции будет выглядеть так:


clear(anyBlock, anyShift);


То есть, никаких спецсимволов указателей/адресов ни для первого ни для второго параметра в вызове нет. При этом переменная anyShift будет изменена.


Следует заметить, что если нужно просто передать массив в функцию, пользуются именно таким синтаксисом, как для массива block. Однако, если массив просто передается, и его элементы не должны изменяться, правильнее будет использовать модификатор const:


void show(unsigned char * const block)


Так же в этом разделе:
← Содержание ...
 
MyTetra Share v.0.35
Яндекс индекс цитирования