Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /var/www/vhosts/bilgigunlugum.net/httpdocs/index.php on line 43
C Programlama

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

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

C ipuçları

Tek boyutlu dizileri fonksiyonlara argüman olarak geçirmenin 3 farklı yöntemi

Bir fonksiyonu çağırırken argüman olarak bir dizi kullandığımızda, program sadece dizinin ilk elemanının bellek adresini (dizi başlangıç adresi) fonksiyon parametrelerine geçirir. Bir dizinin başlangıç adresini bir fonksiyona geçirmek için, fonksiyon parametresini bu işlemi yapacak şekilde tanımlamak gerekir. Programda kullanılan her üç fonksiyon bir dizinin ilk elemanının bellek adresini geçirebileceğimiz parametreye sahiptir.

İlk fonksiyon olan fonk1(), fonksiyonun çağrılmasında argüman olarak kullanılan dizi ile aynı veri türüne sahip ve aynı boyutta bir fonksiyon parametre tanımlaması yapar. İkinci fonksiyon olan fonk2(), parametreyi boyutsuz bir dizi olarak tanımlar. Üçüncü fonksiyon olan fonk3() ise, fonksiyonun çağrılmasında argüman olarak kullanılan dizinin veri türü ile aynı veri türüne sahip bir işaretçiyi parametre olarak tanımlar.

Program, tanımladığı 10 elemanlık diziye 0'dan 9'a kadar olan sayıları sıra ile atar ve ekrana yazar. Fonk1() fonksiyonu ile dizi değerlerine 1, fonk2() fonksiyonu ile 2, fonk3() fonksiyonu ile 3 ekleyerek ekrana yazar.

Fonksiyonlara geçirilen argümanlar dizi başlangıç adresi olduğundan, referans yoluyla argüman geçirme yöntemi kullanılmaktadır.


#include <stdio.h>

void fonk1(int idizi[10]); 
void fonk2(int idizi[]);
void fonk3(int *ip);

int main(void)
{
  int idizi[10];
  int id, size = sizeof(idizi)/sizeof(int);

  for (id=0; id<size; id++) {
       idizi[id] = id;
       printf("%d ", idizi[id]);
  }
  printf("\n");

  fonk1(idizi);
  for (id=0; id<size; id++) printf("%d ", idizi[id]);
  printf("\n");

  fonk2(idizi);
  for (id=0; id<size; id++) printf("%d ", idizi[id]);
  printf("\n");

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

  return 0;
}

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

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

void fonk2(int idizi[])
{
  int id;

  for (id=0; id<10; id++) {
       idizi[id] += 3;
  }
}

void fonk3(int *ip)
{
  int id;

  for (id=0; id<10; id++) {
       ip[id] += 3;
  }
}

Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar:

0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
3 4 5 6 7 8 9 10 11 12
6 7 8 9 10 11 12 13 14 15