C++ Pass Structures to a Function

🔹 تعریف

  • می‌توان یک struct را به تابع ارسال کرد تا روی داده‌های آن پردازش انجام شود.

  • مانند سایر داده‌ها، struct می‌تواند به صورت Pass By Value یا Pass By Reference ارسال شود.

🔹 1️⃣ Pass By Value

  • تابع نسخه‌ای از struct دریافت می‌کند.

  • تغییرات داخل تابع روی struct اصلی اثر نمی‌گذارد.

#include <iostream> using namespace std; struct Student { string name; int age; }; void printStudent(Student s) { // Pass By Value s.age += 1; // تغییر فقط در نسخه محلی cout << s.name << " is " << s.age << " years old." << endl; } int main() { Student s1 = {"Alice", 20}; printStudent(s1); cout << s1.name << " is " << s1.age << " years old." << endl; // سن اصلی تغییر نکرده }

🔹 خروجی:

Alice is 21 years old. Alice is 20 years old.

🔹 2️⃣ Pass By Reference

  • تابع آدرس struct اصلی را دریافت می‌کند.

  • تغییرات داخل تابع روی struct اصلی اثر می‌گذارد.

#include <iostream> using namespace std; struct Student { string name; int age; }; void birthday(Student &s) { // Pass By Reference s.age += 1; // تغییر روی struct اصلی } int main() { Student s1 = {"Bob", 25}; birthday(s1); cout << s1.name << " is " << s1.age << " years old." << endl; // سن اصلی تغییر کرده }

🔹 خروجی: Bob is 26 years old.

🔹 نکات مهم

  1. Pass By Value امن است و struct اصلی تغییر نمی‌کند.

  2. Pass By Reference برای تغییر مقدار اصلی یا جلوگیری از کپی داده‌های بزرگ مناسب است.

  3. می‌توان از Pointer به struct هم استفاده کرد، مشابه Pass By Reference:

void birthday(Student *s) { s->age += 1; }

  1. برای داده‌های بزرگ، Pass By Reference یا Pointer کارایی بهتری دارد.