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
Adını bir dizi genellikle değerlendirir adresi ilk öğesi dizisi, array
&array
aynı değer (ama farklı, yani array 1
&array 1
değ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
Nasıl JavaScript bir dizi boş?...
Nasıl bir dizi belirli bir değeri vars...
Nasıl Java iki dizi bir arada olabilir...
Nasıl JavaScript iki boyutlu bir dizi ...
Nasıl bash sayı değişkenleri tarafında...