Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save anonymous/e414d40329b1b69ca3b2ed02b7358b56 to your computer and use it in GitHub Desktop.
Save anonymous/e414d40329b1b69ca3b2ed02b7358b56 to your computer and use it in GitHub Desktop.
Способы передачи параметровв функцию

Способы передачи параметровв функцию



Способы передачи параметров в функцию на C
Передача параметров
Передача по значению и передача по ссылке

С точки зрения удобства программирования, передавать значения, которые могут изменяться внутри функции лучше всего через ссылку а не через указатель. Поэтому ниже описан возможный, но не самый лучший способ передачи параметров - по указателю. Если передавать параметры через указатель так называемый С-стиль , код функции выглядит так: Если передавать параметры через ссылку , код функции выглядит так: А вызов выглядит так: Видно, что нет никаких разыменовываний в теле функции функции. Так же при таком вызове не требуется передача адреса переменной. И не работает для передачи массивов! Поэтому, к примеру, если функция принимает: А вызов функции будет выглядеть так: Для первого параметра нет спецсимвола взятия адреса хоть и идет работа с указателем из-за того, что имя массива имеет тип указателя. Для второго параметра нет спецсимвола взятия адреса из-за того, что передача идет по ссылке. При таком вызове будут изменяться как ячейки массива anyBlock , так и переменная anyShift. Ключевое слово Const и указатели. Следует заметить, что если нужно передать массив в функцию так, чтобы можно было менять элементы массива, пользуются именно таким синтаксисом, как написано выше. Однако, если массив просто передается, и его элементы не должны изменяться, правильнее будет использовать модификатор const: Правильный ответ - запрет модификации элементов массива. В первых версиях стандарта такого синтаксиса предусмотрено не было. Предолагалась только четкая запись в виде: То есть, модификатор доступа const влияет на тип, написанный слева от него, вот и все дела. То есть, данная запись означает, что константным будет тип unsigned char , таким образом неизменными будут оставаться данные массива, а не указатель на массив. Но потом в стандарт была добавлена возможность написания модификатора доступа в начало определения, и однозначность сразу исчезла. Теперь модификатор доступа const пишется по такому правилу: Модификатор доступа const пишется после типа, и, соответственно, влияет на тип, расположенный слева от него. Но если const написан в начале определения, то он влияет на "короткий" тип справа от него. Таким образом получаем, что запись вида " const в начале" говорит о невозможности изменить сами данные в массиве, а не невозможность изменить указатель на массив. Пользуясь правилом, становится понятно, как написать невозможность изменения указателя на массив. Здесь работает первая часть правила. Можно написать невозможность изменения как данных в массиве, так и указателя на массив: Здесь тоже работает первая часть правила. Но на практике чаще будут встречаться описания с ведущим const по второму пункту правила: Ключевое слово Const и ссылки. В отличие от указателей, ссылки по своей природе обладают таким важным свойством, как невозможность изменения адреса, куда указывает ссылка. Поэтому ссылка инициализируется сразу при создании, и нет возможности задать ей место, куда она должна указывать, где-либо еще в коде. Поэтому никакого смысла в модификаторе, который бы блокировал изменение именно ссылки а не значения, на которое она указывает нет. Поэтому имеет смысл говорить только о синтаксисе параметров функций, который бы блокировал изменение значения, на которое указывает ссылка. Следующие прототипы функций полностью эквивалентны:. Такая форма записи запрещает изменять значение, на которое указывает ссылка. Хорошим тоном считается писать модификатор const для ссылок, у которых значение, на которое она указывает, не должно меняться внутри функций. Компьютер - Программирование - Язык C. Передача через указатель С точки зрения удобства программирования, передавать значения, которые могут изменяться внутри функции лучше всего через ссылку а не через указатель. Передача через ссылку Если передавать параметры через ссылку , код функции выглядит так: Ключевое слово Const и указатели Следует заметить, что если нужно передать массив в функцию так, чтобы можно было менять элементы массива, пользуются именно таким синтаксисом, как написано выше. Следующие прототипы функций полностью эквивалентны: Так же в этом разделе: Теория Откуда в языке Си появился синтаксис указателей, и для чего он предназначался изначально. MyTetra Share Делитесь знаниями!


Сколько яблонь можно посадить на
Скачать сборник нормативов
Инструкции охранника чоп по обходу территории
Двунадесятые праздники иконы
Скачать карту для майнкрафт
Очень плохо выгляжучто делать
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment