पाठ 22 / 36

पॉइंटर और फंक्शन

वेरिएबल का एड्रेस पास करें ताकि फंक्शन असली को बदल सके।

C हमेशा pass-by-value है

फंक्शन आर्गुमेंट हमेशा कॉपी होते हैं। किसी फंक्शन को कॉलर का वेरिएबल बदलने देने के लिए, मान की जगह उसका पॉइंटर पास करें — इसी तरह C "pass by reference" जैसा व्यवहार सिमुलेट करता है।

पॉइंटर से swap

&a और &b पास करने से swap सीधे कॉलर की मेमोरी तक पहुँच पाता है।

void swap(int *x, int *y) {
    int temp = *x;
    *x = *y;
    *y = temp;
}

int main(void) {
    int a = 1, b = 2;
    swap(&a, &b);
    printf("%d %d\n", a, b);
    return 0;
}

Output:

2 1

त्वरित जाँच: पॉइंटर के बिना `swap(int x, int y)` कॉलर के वेरिएबल swap करने में क्यों नाकाम रहता है?

  • x और y मूल की कॉपी हैं
  • C swap करने की अनुमति नहीं देता
  • कंपाइलर इसे हटा देता है
Answer

x और y मूल की कॉपी हैं — पॉइंटर के बिना, फंक्शन केवल अपनी लोकल कॉपी को swap करता है।