2016-12-02 8 views
5

मैं सी में संकेत दिए गए सीख रहा हूँ नीचे में काम कर रहा है मैं कैसे इस कार्यक्रम के नीचे काम कर रहा है थोड़ा के बारे में उलझन में हूँकैसे सूचक काम और वेतन वृद्धि उदाहरण

int main() 
{ 
    int x=30, *y, *z; 
    y=&x; 
    z=y; 
    *y++=*z++; 
    x++; 
    printf("x=%d, y=%p, z=%p\n", x, y, z); 
    return 0; 
} 

उत्पादन

x=31, y=0x7ffd6c3e1e70, z=0x7ffd6c3e1e70 

y और z है परिवर्तनीय x के अगले पूर्णांक पते पर इंगित कर रहे हैं। मैं समझ नहीं पा कैसे इस लाइन काम कर रहा है

*y++=*z++; 

कर सकते हैं किसी कृपया मुझे बताएं कि किस तरह इस एक लाइन सी द्वारा समझा जाता है नहीं कर रहा हूँ?

उत्तर

4

*y++=*z++; वास्तव में इसका मतलब है

*y = *z; 
y += 1*(sizeof(int)); //because int pointers are incremented by 4bytes each time 
z += 1*(sizeof(int)); //because int pointers are incremented by 4bytes each time 

तो उठाई मूल्य प्रभावित नहीं करता है, संकेत एक के बाद बढ़ते हैं।

+3

सिवाय इसके कि उप-संचालन का क्रम पूर्व निर्धारित नहीं है। – pmg

+1

@pmg आप सही हैं, क्या आपके पास उस स्थिति के बारे में कोई उदाहरण है। मुझे इसके बारे में पढ़ना अच्छा लगता है। – cokceken

+1

@pgm: मुझे यकीन है कि यह महत्वपूर्ण है कि: कंपाइलर वैसे भी अंतिम दो बयानों को फिर से व्यवस्थित कर सकता है। – Bathsheba

संबंधित मुद्दे