वह पास-बाय-रेफरेंस नहीं है, जो कि पास-बाय-वैल्यू है जैसा कि दूसरों ने कहा है।
C भाषा बिना किसी अपवाद के पास-बाय-वैल्यू है। एक पॉइंटर को एक पैरामीटर के रूप में पास करने का मतलब पास-पास-संदर्भ नहीं है।
नियम निम्नलिखित है:
एक फ़ंक्शन वास्तविक पैरामीटर मान को बदलने में सक्षम नहीं है।
आइए किसी फ़ंक्शन के स्केलर और पॉइंटर मापदंडों के बीच के अंतर को देखने का प्रयास करें।
स्केलर चर
यह लघु कार्यक्रम स्केलर वैरिएबल का उपयोग करके पास-दर-मूल्य दिखाता है। param
को औपचारिक पैरामीटर कहा जाता है और variable
फ़ंक्शन मंगलाचरण को वास्तविक पैरामीटर कहा जाता है। ध्यान दें param
कि फ़ंक्शन में वृद्धि नहीं बदलती है variable
।
#include <stdio.h>
void function(int param) {
printf("I've received value %d\n", param);
param++;
}
int main(void) {
int variable = 111;
function(variable);
printf("variable %d\m", variable);
return 0;
}
परिणाम है
I've received value 111
variable=111
पास-दर-संदर्भ का भ्रम
हम कोड के टुकड़े को थोड़ा बदलते हैं। param
अब एक सूचक है
#include <stdio.h>
void function2(int *param) {
printf("I've received value %d\n", *param);
(*param)++;
}
int main(void) {
int variable = 111;
function2(&variable);
printf("variable %d\n", variable);
return 0;
}
परिणाम है
I've received value 111
variable=112
यह आपको विश्वास दिलाता है कि पैरामीटर संदर्भ द्वारा पारित किया गया था। यह नहीं था। यह मान से पारित किया गया था, एक मान एक पता होने के नाते। इंट प्रकार के मूल्य में वृद्धि की गई थी, और यह दुष्प्रभाव है जो हमें लगता है कि यह एक पास-बाय-संदर्भ फ़ंक्शन कॉल था।
संकेत - पास-दर-मूल्य
हम उस तथ्य को कैसे दिखा / साबित कर सकते हैं? ठीक है, हो सकता है कि हम स्केलर चर के पहले उदाहरण की कोशिश करें, लेकिन स्केलर के बजाय हम पते (पॉइंटर्स) का उपयोग करते हैं। चलो देखते हैं कि मदद कर सकते हैं।
#include <stdio.h>
void function2(int *param) {
printf("param's address %d\n", param);
param = NULL;
}
int main(void) {
int variable = 111;
int *ptr = &variable;
function2(ptr);
printf("ptr's address %d\n", ptr);
return 0;
}
इसका परिणाम यह होगा कि दो पते बराबर हैं (सटीक मूल्य के बारे में चिंता न करें)।
उदाहरण परिणाम:
param's address -1846583468
ptr's address -1846583468
मेरी राय में यह स्पष्ट रूप से साबित करता है कि संकेत पास-दर-मूल्य हैं। अन्यथा समारोह आह्वान के बाद ptr
होगा NULL
।