SORU
27 Mart 2010, CUMARTESİ


Nasıl bir dizi'adresi C değerine eşittir s?

Aşağıdaki kod bit, işaretçi değerleri ve işaretçi adresi beklendiği gibi farklı.

Ama dizi değerleri ve adresleri yok!

Bu nasıl olabilir?

Çıktı

my_array = 0022FF00
&my_array = 0022FF00
pointer_to_array = 0022FF00
&pointer_to_array = 0022FEFC
#include <stdio.h>

int main()
{
  char my_array[100] = "some cool string";
  printf("my_array = %p\n", my_array);
  printf("&my_array = %p\n", &my_array);

  char *pointer_to_array = my_array;
  printf("pointer_to_array = %p\n", pointer_to_array);
  printf("&pointer_to_array = %p\n", &pointer_to_array);

  printf("Press ENTER to continue...\n");
  getchar();
  return 0;
}

CEVAP
27 Mart 2010, CUMARTESİ


Adını bir dizi genellikle değerlendirir adresi ilk öğesi dizisi, array &array aynı değer (ama farklı, yani array 1 &array 1değildizinin 1'den fazla eleman uzun) eşit.

Dizi adı sizeof işlenen ya da & (Adres) tekli, adı dizi nesnenin kendisini ifade eder. bu iki istisnası vardır: Böylece sizeof array tüm diziyi, bir işaretçi boyutu bayt cinsinden boyutunu verir.

Bir dizi T array[size] olarak tanımlanan tip olacaktır T *. Sen bunu artırmak eğer/ne zaman, dizinin ikinci elemanı almak.

&array değerlendirir aynı Adres ama verilen aynı tanım, oluşturduğu bir işaretçi türü T(*)[size] -- yani, bir işaretçi bir dizi değil, bir tek öğe. Bu işaretçi artış, tüm diziyi tek bir öğenin boyutu boyutunu katacak. Bu kodu örneğin:

char array[16];
printf("%p\t%p", (void*)&array, (void*)(&array 1));

İlk daha 16 büyük ikinci işaretçi 16 char dizisi nedeniyle) bekleyebiliriz. %P genellikle onaltılık işaretçiler dönüştürür beri, bir şey gibi görünebilir:

0x12341000    0x12341010

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Cartoonium

    Cartoonium

    11 NİSAN 2011
  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • SuperPrincessjo

    SuperPrinces

    1 EKİM 2010