C Programlamada Diziler ve İşaretçiler Arasındaki İlişki (Örneklerle)

Bu eğitimde, C programlamada diziler ve işaretçiler arasındaki ilişki hakkında bilgi edineceksiniz. Ayrıca işaretçileri kullanarak dizi öğelerine erişmeyi de öğreneceksiniz.

Diziler ve işaretçiler arasındaki ilişkiyi öğrenmeden önce şu iki konuyu kontrol ettiğinizden emin olun:

  • C Dizileri
  • C İşaretçiler

Diziler ve İşaretçiler Arasındaki İlişki

Dizi, sıralı veri bloğudur. Dizi elemanlarının adreslerini yazdırmak için bir program yazalım.

 #include int main() ( int x(4); int i; for(i = 0; i < 4; ++i) ( printf("&x(%d) = %p", i, &x(i)); ) printf("Address of array x: %p", x); return 0; ) 

Çıktı

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 x dizisinin adresi: 1450734448 

X dizisinin iki ardışık elemanı arasında 4 baytlık bir fark vardır. Bunun nedeni, boyutunun int4 bayt olmasıdır (derleyicimizde).

& X (0) ve x'in adreslerinin aynı olduğuna dikkat edin. Bunun nedeni, x değişkeninin dizinin ilk elemanını göstermesidir.

Yukarıdaki örnekten, bunun &x(0)x'e eşdeğer olduğu açıktır . Ve x(0)eşdeğerdir *x.

Benzer şekilde,

  • &x(1)eşdeğerdir x+1ve x(1)eşdeğerdir *(x+1).
  • &x(2)eşdeğerdir x+2ve x(2)eşdeğerdir *(x+2).
  • Temel olarak, &x(i)eşdeğerdir x+ive x(i)eşdeğerdir *(x+i).

Örnek 1: İşaretçiler ve Diziler

 #include int main() ( int i, x(6), sum = 0; printf("Enter 6 numbers: "); for(i = 0; i < 6; ++i) ( // Equivalent to scanf("%d", &x(i)); scanf("%d", x+i); // Equivalent to sum += x(i) sum += *(x+i); ) printf("Sum = %d", sum); return 0; ) 

Programı çalıştırdığınızda, çıktı:

 6 sayı girin: 2 3 4 4 12 4 Toplam = 29 

Burada, 6 elemanlı bir x dizisi tanımladık. Dizinin elemanlarına erişmek için işaretçiler kullandık.

Çoğu bağlamda, dizi adları işaretçilere dönüşür. Basit bir deyişle, dizi adları işaretleyicilere dönüştürülür. Dizilerin öğelerine erişmek için işaretçileri kullanabilmenizin nedeni budur. Ancak, işaretçilerin ve dizilerin aynı olmadığını unutmamalısınız .

Dizi adlarının işaretçiler haline gelmediği birkaç durum vardır. Daha fazla bilgi edinmek için şu adresi ziyaret edin: Dizi adı ne zaman bir işaretçiye dönüşmez?

Örnek 2: Diziler ve İşaretçiler

 #include int main() ( int x(5) = (1, 2, 3, 4, 5); int* ptr; // ptr is assigned the address of the third element ptr = &x(2); printf("*ptr = %d ", *ptr); // 3 printf("*(ptr+1) = %d ", *(ptr+1)); // 4 printf("*(ptr-1) = %d", *(ptr-1)); // 2 return 0; )

Programı çalıştırdığınızda, çıktı:

 * ptr = 3 * (ptr + 1) = 4 * (ptr-1) = 2

Bu örnekte, &x(2)üçüncü elemanın adresi ptr işaretçisine atanmıştır. Dolayısıyla, 3yazdırdığımızda gösterildi *ptr.

Ve baskı *(ptr+1)bize dördüncü unsuru verir. Benzer şekilde, baskı *(ptr-1)bize ikinci unsuru verir.

Ilginç makaleler...