CodeBlanks Logo Icon CodeBlanks

Özet - Diziler ve işaretçiler

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

Dizi-işaretçi ilişkisini birleştirerek bir dizi toplam fonksiyonu yazarsın.

Özet: Diziler ve işaretçiler

Bu grupta diziler ve işaretçilerin yakın ilişkisini gördün:

  • Dizi adı, ilk elemanın adresine dönüşür (çürüme).
  • p[i] ile *(p + i) aynıdır.
  • Diziyi fonksiyona geçirince işaretçi olur; boyut ayrı verilir.
  • end = arr + n kalıbı işaretçi döngüsü kurar.
  • İki boyutlu diziler iç içe döngü ile gezilir.

Şimdi kısa bir alıştırmayla bunları birleştirelim.

Uygulama Özet alıştırması

int sum(int *arr, int n) fonksiyonunu tanımla: for ile diziyi topla ve total döndür. main içinde int arr[3] = {10, 20, 30}; tanımla. int *p = arr; ile başla. printf ile *p, *(p + 2) ve sum(arr, 3) sonuçlarını ayrı satırlarda yazdır. Çıktı 10, 30, 60 olmalı.

Başlangıç kodu

main.c
#include <stdio.h>

/* sum fonksiyonunu yaz: int işaretçi ve boyut al, for ile topla */

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

Örnek çözüm

main.c
#include <stdio.h>

int sum(int *arr, int n) {
    int total = 0;
    for (int i = 0; i < n; i++) {
        total += arr[i];
    }
    return total;
}

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

Beklenen çıktı

10
30
60

Soru ve cevaplar

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

1 Dizi adı aslında nedir?

  • Dizinin uzunluğu
  • Dizinin kopyası
  • İlk elemana işaretçi Doğru cevap
  • NULL işaretçi

Açıklama: Dizi adı, ilk elemanın adresine dönüşür.

2 Kavramları eşleştir

Kavram Anlamı
arr dizi adı = işaretçi
*(p+i) işaretçi erişimi
int *arr fonksiyon parametresi
p < end döngü koşulu

3 İşaretçi ile elemana eriş

Soru
int arr[3] = {10,20,30};
int *p = arr;
printf("%d", *(p + ____));  /* 30 yazar */
Cevap
int arr[3] = {10,20,30};
int *p = arr;
printf("%d", *(p + 2));  /* 30 yazar */

Açıklama: *(p + 2) üçüncü elemanı (30) verir.

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