ठीक है, तो सी पास-बाय-वैल्यू है, जिसका अर्थ है चर के लिए मूल चर के बजाय चर की एक प्रति का उपयोग किया जाता है, है ना? तो, क्या उस प्रतिलिपि में हमेशा एक ही स्मृति पता होगा? इस कोड पर विचार करें:क्या सी में फ़ंक्शन पैरामीटर में हमेशा एक ही स्मृति पता होता है?
void test(int *ptr) {
printf("&ptr: %p\n", &ptr);
printf("ptr: %p\n", ptr);
printf("*ptr: %d\n\n", *ptr);
}
int main() {
int a = 1, b = 2, c = 3, d = 4, e = 5;
test(&a);
test(&b);
test(&c);
test(&d);
test(&e);
return 0;
}
उत्पादन मैं इस कोड से मिलता है यह है:
&ptr: 0x7fff70536728
ptr: 0x7fff7053674c
*ptr: 1
&ptr: 0x7fff70536728
ptr: 0x7fff70536750
*ptr: 2
&ptr: 0x7fff70536728
ptr: 0x7fff70536754
*ptr: 3
&ptr: 0x7fff70536728
ptr: 0x7fff70536758
*ptr: 4
&ptr: 0x7fff70536728
ptr: 0x7fff7053675c
*ptr: 5
मेरे पेट महसूस कर रही थी "नहीं"। यह मेरी समझ है कि ptr
test()
के कोड ब्लॉक के बाहर मौजूद नहीं है। तो, सभी पांच फ़ंक्शन कॉल के लिए &ptr
क्यों समान है?
यह वही होने की गारंटी नहीं है। आप अनिर्दिष्ट व्यवहार देख रहे हैं। (यदि आप मुख्य के अलावा किसी अन्य फ़ंक्शन से इसे कॉल करते हैं तो आप एड्रेस चेंज देख सकते हैं।) –
और यह हस्तक्षेप करने वाली फ़ंक्शन कॉल के बिना भी इस व्यवहार को प्रदर्शित नहीं कर सकता है। किसी विशेष मशीन पर कार्यान्वयन के आधार पर। –
@Andyzmith भी इस पर निर्भर करता है कि संकलक इसे कैसे कार्यान्वित करने का निर्णय लेता है। :) – jmstoker