2012-07-09 16 views
6

मैं सभी सी प्रोग्रामिंग के साथ नए हूं और मुझे एक सवाल है पर बात करने के लिए आदेश में सूचक नकल करने,कैसे एक ही वस्तु

अगर मैं उदाहरण के लिए एक struct है - और मैं इस पर ओर इशारा करते हुए हूँ, मैं एक ही डेटा पर इंगित करने के लिए एक नया सूचक बनाना चाहता हूं, लेकिन दो बिंदुओं के लिए एक ही वस्तु पर इंगित करने के लिए नहीं। मैं संरचना में हर क्षेत्र को कॉपी किए बिना ऐसा कैसे कर सकता हूं?

typedef struct 
{ 
int x; 
int y; 
int z; 
}mySTRUCT; 

mySTRUCT *a; 
mySTRUCT *b; 
a->x = 1; 
a->y = 2; 
a->z = 3; 

और अब मैं ख एक ही डेटा

b = *a 

यह सही नहीं है पर बात करने के लिए चाहते हैं, और संकलक मुझ पर चिल्ला रहा है

किसी भी मदद बहुत अच्छा होगा! धन्यवाद :)

उत्तर

10

पहली बात, आप कोड गलत है। आप पॉइंटर नाम a बनाते हैं, लेकिन आप इसके लिए कुछ भी नहीं बनाते हैं। आपको इसे अस्वीकार करने की अनुमति नहीं है (a->x के साथ) जब तक कि यह कुछ इंगित न हो जाए।

एक बार जब आप वास्तव में अपने संकेत को इंगित करने के लिए कुछ structs है, तो आप उन्हें काम से कॉपी कर सकते हैं:

myStruct a_referand = {0}; 
myStruct b_referand = {0}; 
myStruct *a = &a_referand; 
myStruct *b = &b_referand; 

a->x = 1; 
*b = *a; // copy the values of all members of a_referand to b_referand 
// now b->x is 1 
b->x = 2; 
// now b->x is 2 but a->x is still 1 
+0

यह क्यों है * बी = * ए और नहीं बी = * ए? मैं अंतर के बीच अंतर नहीं समझ सकता: बी = ए, * बी = ए, बी = * ए, * बी = * ए। क्या मुझे एक संक्षिप्त स्पष्टीकरण मिल सकता है? – user1386966

+3

@ उपयोगकर्ता 1386966: 'ए' और' बी' पॉइंटर्स हैं। '* ए' और' * बी' वे चीजें हैं जिन्हें वे इंगित करते हैं। आप 'बी' की ओर इशारा करते हुए 'ए' द्वारा इंगित चीज की प्रतिलिपि बनाना चाहते हैं। इसलिए आप '* बी = * ए' लिखते हैं। 'बी = ए 'सूचक' बी 'को' ए' के समान मान रखने के लिए बदलता है, जो कि 'बी' को बदलने के लिए एक और तरीका है जो ''' को इंगित करता है। 'बी = * ए' और' * बी = ए' व्यर्थ हैं, क्योंकि आप एक सूचक को एक सूचक के बराबर नहीं बना सकते हैं। –

+1

मेरा सामान्य सादृश्य, बीटीडब्ल्यू, यह है कि एक सूचक कागज पर एक सड़क के पते के साथ कागज के टुकड़े की तरह है। यह बात जो इंगित करती है (उर्फ "रेफरेंड") एक इमारत की तरह है। आप किसी इमारत ('* बी) 'को उस चीज़ के साथ भ्रमित नहीं करेंगे जिसमें इमारत का पता लिखा गया है (' बी')। '* बी = * ए' का अर्थ है" बी 'पर पते पर एक इमारत का निर्माण, और इसे इमारत के समान बनाओ जिसका पता' ए 'पर है। 'बी = ए' का अर्थ है" ''' पर लिखा गया पता कॉपी करें "बी'"। समानता कमजोर होती है जब आप ध्यान देते हैं कि सी में आप 'ए' के ​​लिए एक सूचक ले सकते हैं - यहां तक ​​कि पेपर के टुकड़े भी सी –

1

memcpy() फ़ंक्शन एक स्थान से दूसरे स्थान पर डेटा का एक ब्लॉक कॉपी करता है। अपने प्रश्न को फिट करने के लिए, आप प्रदर्शन करेंगे:

memcpy(b, a, sizeof(*b)); 
+1

-1 का उपयोग नहीं करते 'memcpy' जब तुम सिर्फ' के साथ वस्तुओं प्रदान कर सकते हैं * बी = * ए'। –