मैं यहां भ्रम को समझता हूं। "मूल्य से गुजरने" और "संदर्भ द्वारा पास" की अवधारणाएं इतनी स्पष्ट नहीं हैं कि वे ऐसा प्रतीत होते हैं। ध्यान रखें कि कंप्यूटर इन अवधारणाओं को नहीं जानता है और इसके अनुसार व्यवहार नहीं करता है। कंप्यूटर को प्रकारों के बारे में पता नहीं है। इसलिए यह पॉइंटर्स और मूल्यों का भेद नहीं करता है। मेरे द्वारा और उदाहरण समझाने की कोशिश करते हैं:
void func1(int x)
{
x = 5;
}
void func2(int *x)
{
int a;
x = &a;
}
आपरेशन दोनों कार्यों में मशीन के लिए एक ही है: यह तर्क हो जाता है और यह बदल जाता है। ध्यान दें कि, दूसरे फ़ंक्शन में यह modifiy * x नहीं है, यह x संशोधित करता है।
अब अगर हम इन कार्यों फोन,
int y = 10;
func1(y); //value of y does not change
func2(&y); //value of &y does not change, but the value of the address which y points may change.
मुझे लगता है कि, मूल रूप से, हर कार्य कॉल "मूल्य से कॉल" है कहने के लिए पसंद करते हैं। लेकिन एक सूचक प्रकार के मामले में, हमारे पास स्मृति में किसी अन्य पते की सामग्री को बदलने का एक तरीका है।
अगर हम
void func2(int *x)
{
*x = 5;
}
रूप func2
लिखा था फिर, इस "संदर्भ द्वारा कॉल" के एक असली मामला होगा।
स्रोत
2010-12-13 09:59:23
पॉइंटर मूल्य से पारित किया जाता है लेकिन पॉइंटर द्वारा इंगित ऑब्जेक्ट को फ़ंक्शन (कॉन्स्ट-क्वालिफिकेशन के आधार पर) द्वारा संशोधित किया जा सकता है। – dreamlax