BG MVC Model View Controller eğitim serisi yayında...

Ana sayfa > Programlama > C Programlama > C ipuçları > c_ipuc00005

C ipuçları

Bir fonksiyona argüman olarak geçirilen dizinin boyutunu alma

Bir fonksiyona argüman olarak geçirilen dizinin boyutunu sizeof işlemcisi ile doğrudan alamayız. Fonksiyon dizi parametresi boyutlu ya da boyutsuz olarak tanımlansa bile, fonksiyon kendisine geçirilen diziyi değil dizi başlangıç adresini parametre olarak kabul eder.

Fonksiyon içinde, parametre olarak geçirilen bir dizinin boyutunu elde etmek için, dizi boyutunu da ayrı bir parametre olarak fonksiyona geçirmek gerekir.


#include <stdio.h>

void fonk(int idizi[10], int id);

int main(void)
{
  int idizi[10];
  int id;

  for(id=0; id<10; id++) idizi[id] = id+1;

  printf("idizi dizisinin eleman sayısı: %d\n", sizeof(idizi)/sizeof(idizi[0]));

  fonk(idizi, 10);

  return 0;
}

void fonk(int idizi[10], int id)
{
  printf("fonk(): idizi dizisinin eleman sayısı: %d\n", sizeof(idizi)/sizeof(idizi[0])); // 1
  printf("fonk(): idizi dizisinin eleman sayısı: %d\n", id); // 10

  for(id=0; id<10; id++) printf("%d ", idizi[id]);
}

Yukarıdaki programı derleyip çalıştırdığımızda, aşağıdaki ifadeleri ekrana yazar:

idizi dizisinin eleman sayısı: 10
fonk(): idizi dizisinin eleman sayısı: 1
fonk(): idizi dizisinin eleman sayısı: 10
1 2 3 4 5 6 7 8 9 10

main() fonksiyonu içinde kullanılan sizeof(idizi) ifadesi 10 değerini verirken, fonksiyon içinde kullanıldığında sadece dizinin ilk elemanının boyutunu verdiğinden 4 değerini verir.