ارسال با ارجاع (Pass By Reference)
گاهی می خواهیم تابع، مقدار اصلی را عوض کند. این جا «ارجاع (Reference)» کمک می کند. ارجاع یعنی خود خود متغیر را بدهیم، نه فقط کپی آن. مثل دادن خود دفتر، نه فتوکپی آن.
ارسال با ارجاع یعنی چه؟
وقتی پارامتر را با & می نویسی، تابع می تواند مقدار ورودی را تغییر دهد. بنابراین نتیجه بیرون تابع هم عوض می شود.
یک عدد را با ارجاع تغییر بده
void changeValue(int &num) {
  num = 50;
}
int main() {
  int value = 10;
  changeValue(value);
  cout << value;
  return 0;
}
نکته: ارجاع، کپی نمی سازد. پس حافظه اضافی نمی گیرد. اما مراقب تغییر ناخواسته باش.
جابجایی مقادیر با ارجاع
void swapNums(int &x, int &y) {
  int z = x;
  x = y;
  y = z;
}
int main() {
  int firstNum = 10;
  int secondNum = 20;
  cout << "Before swap: " << "\n";
  cout << firstNum << secondNum << "\n";
  swapNums(firstNum, secondNum);
  cout << "After swap: " << "\n";
  cout << firstNum << secondNum << "\n";
  return 0;
}
هشدار: ترتیب پارامترها مهم است. بنابراین جابجایی درست انجام شود.
رشته را با ارجاع ویرایش کن
void modifyStr(string &str) {
  str += " World!";
}
int main() {
  string greeting = "Hello";
  modifyStr(greeting);
  cout << greeting;
  return 0;
}
گام های عملی ارسال با ارجاع
- یک تابع با پارامتر ارجاعی تعریف کن.
- داخل تابع مقدار پارامتر را تغییر بده.
- خارج تابع، تغییر را بررسی و چاپ کن.
مطالعه بیشتر
صفحه مرجع ارجاع ها را ببین: W3Schools: References. همچنین خود مطلب منبع: Pass By Reference.
برای پیوندهای داخلی: درباره ارسال با ارجاع، مقادیر بازگشتی و توابع بیشتر بخوان.
جمع بندی سریع
- & یعنی ارجاع، نه کپی.
- تابع می تواند مقدار اصلی را عوض کند.
- مراقب تغییر ناخواسته باش.
- ترتیب پارامترها را دقیق حفظ کن.
