SORU
2 Temmuz 2013, Salı


Char benim işaretçi int*dökme sonra geçersiz değer puan

C programlama dili yeni öğrenmeye başladım öğreniyorumişaretçiler ile dizileri. Bu konuda sorunum var, bir çıkış olmalı, umarım5ama öyle2Herkes lütfen , açıklamama neden?

int main(){
   int arr[] = {1, 2, 3, 4, 5};
   char *ptr = (char *) arr;
   printf("%d", *(ptr 4));
   return 0;
}

CEVAP
2 Temmuz 2013, Salı


Bir int 32 bit (4 bayt) mimarisi küçük bir indian kabul int arr[] bireysel bayt böyle (en düşük anlamlı adreste bayt. Hex tüm değerler):

|01 00 00 00|02 00 00 00|03 00 00 00|04 00 00 00|05 00 00 00
char *ptr = (char *) arr;

char*, döküm şimdi, beri ptr ilk byte puan - char dizi sonrası olarak kabul edilir:

|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5|0|0|0
 ^
  -- ptr

Daha sonra *(ptr 4) char dizisinin beşinci element erişir ve char karşılık gelen değeri döndürür:

|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5|0|0|0
         ^
          -- *(ptr   4) = 2

Dolayısıyla, printf() 2 yazdırır.

Big Endian bir sistemde, int Her içinde bayt sırası ile sonuçlanan tersine çevrilir

|0|0|0|1|0|0|0|2|0|0|0|3|0|0|0|4|0|0|0|5
         ^
          -- *(ptr   4) = 0

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alfredo Garcia

    Alfredo Garc

    25 Mayıs 2007
  • CNET

    CNET

    5 Mayıs 2006
  • Codecourse

    Codecourse

    3 ŞUBAT 2009