ساختار و پوینترها (Structs & Pointers)
«ساختار و پوینترها» یعنی اشاره گرها را روی «ساختار (Structure)» به کار ببریم. این کار انتقال داده را سبک می کند. همچنین تغییرها مستقیم روی همان داده اجرا می شود.
کار با پوینترِ ساختار
برای ساخت پوینترِ ساختار، مانند بقیه نوع ها از * استفاده کن. سپس با عملگر -> به اعضا دسترسی بگیر.
// Define a struct
struct Car {
char brand[30];
int year;
};
int main() {
struct Car car = { "Toyota", 2020 };
struct Car *ptr = &car;
printf("Brand: %s\n", ptr->brand);
printf("Year: %d\n", ptr->year);
return 0;
}
ارسال پوینترِ ساختار به تابع
با ارسال آدرس ساختار، تابع می تواند مقدارهای اصلی را عوض کند.
struct Car {
char brand[30];
int year;
};
void updateYear(struct Car *c) {
c->year = 2025;
}
int main() {
struct Car myCar = { "Toyota", 2020 };
updateYear(&myCar);
printf("Brand: %s\n", myCar.brand);
printf("Year: %d\n", myCar.year);
return 0;
}
چرا از پوینترِ ساختار استفاده کنیم؟
- کپی سنگین داده انجام نمی شود و برنامه سریع تر است.
- تابع می تواند مقدارهای اصلی را تغییر دهد.
- برای ساخت پویا با
malloc()آماده می شویم.
نکته: اگر پروژه بزرگ است، پوینترِ ساختار کد را تمیزتر می کند. برای مرور پیش نیازها، صفحه ساختارها را ببین. سپس به ساختار تو در تو و فصل بعدی یونین ها سر بزن.
مراحل پیشنهادی تمرین
- یک ساختار ساده بساز.
- نمونه ایجاد کن و پوینتر بگیر.
- با -> اعضا را چاپ و تغییر بده.
جمع بندی سریع
- پوینترِ ساختار، جابه جایی را سبک می کند.
- به اعضا با -> دسترسی بگیر.
- تابع با آدرس، مقدار اصلی را عوض می کند.
- برای تخصیص پویا، پوینتر لازم است.