بازگشت چند مقدار از تابع

روش‌های بازگرداندن چند مقدار از تابع با آرایه، ساختار و اشاره‌گر

مشکل

گفتیم هر تابع 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انواع مختلف، خواناتعریف اضافی لازم دارد

نکات مهم

این مبحث بخشی از دوره آموزش کامل زبان C است.

ابزارهای مرتبط