2016-12-02 73 views
5
I C. işaretçiler öğrenme am

altında çalışmaktadır nasılişaretçi atama ve artış, örneğin

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; 
} 

çıkış

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

y ve z yaklaşık biraz karıştı değişken x sonraki tamsayı adresine işaret ediyor. Bu hat

*y++=*z++; 

birisi bu bir satır C anlaşılmaktadır bana nasıl açıklayabilir misiniz nasıl çalıştığını ben anlamak mümkün değilim?

cevap

4

*y++=*z++; aslında

*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 

Yani sivri değerli işaretler birer artırılır, etkilenen anlamına gelir. alt operasyonların sırası önceden belirlenmiş olmadığı hariç

+3

. haklısın @pmg – pmg

+1

, o durumla ilgili herhangi bir örnek var. Bunu okumayı severim. – cokceken

+1

@pgm: derleyici de zaten son iki ifadeyi yeniden düzenlemek olabilir: Ben konularda emin unutmayın. ; ' – Bathsheba