2.Ders : C İşaretçiler ve Diziler

Hits: 64

image_pdfpdf indir

Bu eğitimde, C programlamada diziler ve işaretçiler arasındaki ilişkiyi öğreneceksiniz. İş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

Bir dizi, sıralı veri bloğudur. Bir dizinin elemanlarının adresini yazdıralım.

#include <stdio.h>
int main()
{
   int x[4];
   int i;
   for(i = 0; i < 4; ++i)
   {
      printf("&x[%d] = %p\n", i, &x[i]);
   }
   printf("Address of array x: %p", x);
   return 0;
}

Çıktısı :

&x[0] = 1450734448
&x[1] = 1450734452
&x[2] = 1450734456
&x[3] = 1450734460
Address of array x: 1450734448

X dizisinin ardışık iki elemanı arasında 4 baytlık bir fark vardır. Bunun nedeni int boyutunun 4 byte olmasıdır.

Dikkat edin, & x [0] ve x adresleri aynıdır. Bunun nedeni, x değişkeninin dizinin ilk öğesini göstermesidir.

Yukarıdaki örnekte, & x [0] ‘in x’e eşdeğer olduğu açıktır. Ve, x [0], * x’e eşittir.

Benzer şekilde,

& x [1], x + 1’e eşittir ve x [1], * (x + 1) ‘e eşdeğerdir.
& x [2], x + 2’ye eşittir ve x [2], * (x + 2) ‘ye eşdeğerdir.

Temel olarak, & x [i], x + i’ye eşittir ve x [i], * (x + i) ‘ye eşdeğerdir.

Örnek 1: İşaretçiler ve Diziler

#include <stdio.h>
int main()
{
  int i, x[6], sum = 0;
  printf("6 sayı giriniz: ");
  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("toplam = %d", sum);
  return 0;
}

Çıktısı :

6 sayı giriniz:  2
 3
 4
 4
 12
 4
toplam = 29 

Burada, 6 elementten oluşan bir dizi ilan ettik. Dizinin elemanlarına erişmek için işaretçiler kullandık.

Basit bir deyişle, dizi adları işaretçilere dönüştürülür. Dizilerin öğelerine erişmek için işaretçileri kullanmanın nedeni budur. Ancak, işaretçilerin ve dizilerin aynı olmadığını hatırlamanız gerekir.

Örnek 2: İşaretçiler ve Diziler

#include <stdio.h>
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 \n", *ptr);   // 3
  printf("*ptr+1 = %d \n", *ptr+1); // 4
  printf("*ptr-1 = %d", *ptr-1);  // 2
  return 0;
}

Çıktısı :

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

Bu örnekte, üçüncü öğenin adresi olan & x [2], ptr işaretçisine atanmıştır. Dolayısıyla, * ptr basıldığında 3 görüntülendi.

Ve * ptr + 1 basmak bize dördüncü elemanı verir. Benzer şekilde, * ptr-1 basmak bize ikinci elemanı verir.