Back to questions
Junior — Middle
66
Какие особенности и различия есть при передаче аргументов в функции в языке C++?
Companies where asked
Спецвузавтоматика
Answer from AI
sobes.tech AI
В C++ аргументы в функции можно передавать несколькими способами, каждый из которых имеет свои особенности:
- По значению: копируется значение аргумента. Изменения внутри функции не влияют на оригинал.
- По ссылке (
&): функция получает ссылку на оригинальный объект, изменения внутри функции отражаются на аргументе. - По указателю (
*): передаётся адрес объекта, что позволяет изменять объект, но требует проверки наnullptr.
Особенности:
- Передача по значению безопасна, но может быть затратной для больших объектов.
- Передача по ссылке эффективна и удобна, особенно с
constдля защиты от изменений. - Передача по указателю позволяет работать с динамическими объектами и указывать на отсутствие объекта.
Пример:
void foo(int val) { val = 10; } // по значению
void bar(int& ref) { ref = 10; } // по ссылке
void baz(int* ptr) { if(ptr) *ptr = 10; } // по указателю
int main() {
int a = 0;
foo(a); // a останется 0
bar(a); // a станет 10
baz(&a); // a станет 10
}