بازگشت چند مقدار از تابع
روشهای بازگرداندن چند مقدار از تابع با آرایه، ساختار و اشارهگر
مشکل
گفتیم هر تابع C فقط یک مقدار برمیگرداند. اما اگر تابعی چند نتیجه داشته باشد چه؟ مثلاً تقسیمی که هم خارجقسمت و هم باقیمانده را میدهد!
روش ۱: بازگشت با آرایه
میتوان چند مقدار را در آرایه قرار داد و برگرداند:
int *getMinMax(int arr[], int size) {
static int result[2]; // static تا بعد از پایان تابع زنده بماند
result[0] = min;
result[1] = max;
return result;
}
⚠️ کلمه static ضروری است وگرنه آرایه محلی بعد از پایان تابع حذف میشود.
روش ۲: خروجی از طریق پارامتر اشارهگر
روش استاندارد C — آدرس متغیرهای نتیجه را به تابع میدهیم:
void divide(int a, int b, int *quotient, int *remainder) {
*quotient = a / b;
*remainder = a % b;
}
int main() {
int q, r;
divide(17, 5, &q, &r);
printf("خارجقسمت: %d، باقیمانده: %d", q, r);
}
این روش با مفهوم اشارهگر کار میکند که در بخش مربوطه کامل توضیح داده میشود.
روش ۳: استفاده از struct
مقادیر مرتبط را در یک ساختار (struct) بستهبندی میکنیم:
struct Result {
int quotient;
int remainder;
};
struct Result divide(int a, int b) {
struct Result r;
r.quotient = a / b;
r.remainder = a % b;
return r;
}
کدام روش بهتر است؟
| روش | مزیت | معایب |
|---|---|---|
| آرایه | ساده برای مقادیر همنوع | فقط یک نوع داده، نیاز به static |
| اشارهگر | استاندارد و کارآمد C | نیاز به درک اشارهگر |
| struct | انواع مختلف، خوانا | تعریف اضافی لازم دارد |
نکات مهم
- هرگز آدرس متغیر محلی غیر-static را از تابع برنگردانید — بعد از پایان تابع آن حافظه نامعتبر است
- برای شروع، روش اشارهگر رایجترین روش در کدهای واقعی C است
این مبحث بخشی از دوره آموزش کامل زبان C است.