CodeBlanks Logo Icon CodeBlanks

Dizi adı işaretçi

  • C kursu
  • Başlangıç
  • Ders 77/116
  • 5 dk

Dizi adının ilk elemana işaretçi olduğunu öğrenirsin.

Dizi adı işaretçidir

C'de dizi adı, dizinin ilk elemanının adresine dönüşür. Bu yüzden bir dizi adını bir işaretçiye doğrudan atayabilirsin.

int arr[3] = {10, 20, 30};
int *p = arr;  /* p, arr[0]'ın adresini tutar */
printf("%d", *p);  /* 10 yazar */

Bu davranışa dizi çürümesi (array decay) denir: dizi bilgisi işaretçiye düşer. arr ve p artık aynı bellek bölgesini gösterir.

Dizi çürümesi fonksiyonlarda

Bir diziyi fonksiyona geçirince dizi adı işaretçiye dönüşür. Fonksiyon dizinin kopyasını değil, kendisini görür. Bu yüzden fonksiyon içinde dizinin elemanları değiştirilebilir.

void add_one(int *arr, int n) {
    for (int i = 0; i < n; i++) arr[i]++;
}

Dizi uzunluğu işaretçide saklanmaz; bu yüzden boyutu ayrı parametre olarak vermek gerekir.

Uygulama İşaretçi ile dizi elemanlarına eriş

int arr[3] = {10, 20, 30}; tanımla. int *p = arr; ile p'yi arr'ya bağla. Üç printf ile *p, *(p + 1) ve *(p + 2) sonuçlarını ayrı satırlarda yazdır. Çıktı 10, 20, 30 olmalı.

Başlangıç kodu

main.c
#include <stdio.h>

int main(void) {
    int arr[3] = {10, 20, 30};
    /* p'yi arr'ya bağla; *p, *(p+1), *(p+2) yazdır */
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

int main(void) {
    int arr[3] = {10, 20, 30};
    int *p = arr;
    printf("%d\n", *p);
    printf("%d\n", *(p + 1));
    printf("%d\n", *(p + 2));
    return 0;
}

Beklenen çıktı

10
20
30

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 int arr[3] = {10,20,30}; printf("%d", *(arr+1)); ne yazar?

  • 10
  • 20 Doğru cevap
  • 30
  • 11

Açıklama: *(arr+1), arr[1] yani 20'dir.

2 Diziyi işaretçiye ata

Soru
int arr[3] = {10, 20, 30};
int *p = ____;  /* p artık arr'yi işaret eder */
Cevap
int arr[3] = {10, 20, 30};
int *p = arr;  /* p artık arr'yi işaret eder */

Açıklama: dizi adını doğrudan işaretçiye atayabilirsin.

3 Dizi-işaretçi kavramlarını eşleştir

Kavram Anlamı
arr ilk elemanın adresi
arr+1 ikinci elemanın adresi
*(arr+2) üçüncü elemanın değeri
int *p = arr işaretçi ataması

Başlangıç bölümündeki tüm dersler