2014-12-14 26 views
5

Bu kod snippet'inde neler olduğunu tam olarak anlamak için biraz yardıma ihtiyacınız var. Programa çalıştırdığınızda (c [b]) printf açıklamada [p] bölüm gelince o 7.C dizilerini ve işaretleyicileri anlama

#include <stdio.h> 
int main() { 
int a[] = {1,2,3,4,5,6,7,8,9}; 
int b[] = {1,2,3,4,5,6,7,8,9}; 
int c = 5; 
int *p = a; 
printf("--> %d", (c[b])[p]); 
return 0; 
} 

Biraz kafam karıştı yazdırır. Herhangi bir yardım/açıklama büyük ölçüde takdir edilecektir.

+3

'c [b]', '* (c + b)' ile aynı anlama gelir. Bu yardımcı olmalı. – bzeaman

+0

Olası kopyası [Dizi adı C olarak bir işaretçi mi?] (Http://stackoverflow.com/questions/1641957/is-array-name-a-pointer-in-c) – jww

+0

@BennoZeeman Bazı parantezleri unuttun. Onlar önemli. yani, mevcut cevaba bakınız. –

cevap

13

Bu şekilde yazılması biraz garip, ancak C'deki [] işleci değişkendir. yerlerde bakmak için biraz garip,

p[b[c]] = p[b[5]] = p[6] = a[6] = 7 

çok çalışacak özgün ifadesi ile aynı yapmak: Yani (c[b])[p] anlamak çok daha kolay olan p[b[c]] aynıdır demektir

(c[b])[p] = (5[b])[p] = (b[5])[p]) = 6[p] = p[6] = a[6] = 7 

Yerdeğiştirme [] ait (bu sözcük ise) sadece kendi tanımına bağlıdır - yani, a[b] sen fark etmez a ve b sırasını görebilirsiniz *(a + b), aynıdır.