# पॉइंटर और फंक्शन — C प्रोग्रामिंग

Source: https://www.geekswithgeeks.com/hi/c/c-pointers-functions

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

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

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

## पॉइंटर से swap

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

```c
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
```

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

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

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