CodeBlanks Logo Icon CodeBlanks

Diziyi fonksiyona geçme

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

Diziyi fonksiyona işaretçi olarak geçmeyi öğrenirsin.

Diziyi fonksiyona geçirme

Bir diziyi fonksiyona geçirirken dizi adı işaretçiye dönüşür. Fonksiyon imzasında int arr[] veya int *arr yazabilirsin; ikisi de aynı anlama gelir.

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

Dizi uzunluğu işaretçi ile gelmez; bu yüzden n parametresi ayrı verilir. Fonksiyon dizinin orijinal elemanlarını görür, kopyasını değil.

sizeof işaretçide küçük gelir

Fonksiyon içinde sizeof(arr) dizi boyutunu değil, işaretçi boyutunu verir (genellikle 4 veya 8 byte). Bu yüzden dizi uzunluğunu fonksiyona ayrı parametre olarak vermek zorunludur.

void print_all(int *arr, int n) {
    /* sizeof(arr) burada 4 veya 8! */
    for (int i = 0; i < n; i++) printf("%d ", arr[i]);
}

Bu, dizi çürümesinin en sıkı tuzağıdır. Uzunluğu her zaman ayrı taşı.

Uygulama Toplam fonksiyonu yaz

int sum(int *arr, int n) fonksiyonunu tanımla: bir for döngüsü ile dizinin elemanlarını topla ve total değişkenini döndür. main içinde int arr[3] = {4, 5, 6}; tanımla ve printf("%d\n", sum(arr, 3)); ile sonucu yazdır. Çıktı 15 olmalı.

Başlangıç kodu

main.c
#include <stdio.h>

/* sum fonksiyonunu buraya tanımla: int dizisinin toplamını döndür */

int main(void) {
    int arr[3] = {4, 5, 6};
    /* sum çağrısı ile toplamı 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] = {4, 5, 6};
    printf("%d\n", sum(arr, 3));
    return 0;
}

Beklenen çıktı

15

Soru ve cevaplar

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

1 İmza ve anlam eşleştir

Kavram Anlamı
int arr[] dizi parametresi
int *arr işaretçi parametresi
arr, 3 dizi ve boyut
sum(arr, n) fonksiyon çağrısı

2 Hangi fonksiyon imzası bir int dizisini kabul eder?

  • void f(int[] arr)
  • void f(int arr)
  • void f(int *arr[])
  • void f(int arr[]) Doğru cevap

Açıklama: int arr[] imzası bir int dizisini (işaretçi) kabul eder.

3 Fonksiyona dizi ve boyut geçir

Soru
int arr[3] = {1, 2, 3};
sum(arr, ____);  /* 3 elemanlı diziyi geçir */
Cevap
int arr[3] = {1, 2, 3};
sum(arr, 3);  /* 3 elemanlı diziyi geçir */

Açıklama: 3 elemanlı dizi için boyut 3 verilmeli.

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