BİLGİ SAYAMIYORUM beta

C++ da, 2 boyutlu bir liste, bir fonksiyona parametre olarak nasıl gönderilir?

0

2 boyutlu listeler ve pointerler (işaretçiler) bunlar ideal bir dünyada birbirinden çok farklı gibi dursalar da aslında benzer yapıları var. Benim anladığım kadarıyla kolonlardan ve satırlardan oluşan bir tablo düşündüğümde her satır elemanı bir kolonu işaret ediyormuş gibi gözüktüğü için bu oluyor, yani bu sebeple onda yer alan öğenin adresini. Bu yüzden 2 boyutlu bir listeyi tanımlarken "int** tablo" şeklinde bir şey kullanmamalısınız, bu sadece işaretçiyi işaret eden değerler için kullanılmalı. "tablo" adındaki dinamik 2 boyutlu bir sayı listesini tanımlamanın en uygun yolu şu olabilir:

int (*tablo)[Y] = malloc(sizeof(int[X][Y]));

Belirli yükseklikteki bir 2 boyutlu listeyi ise şu şekilde tanımlayıp bir fonksyiona parametre olarak gönderebilirsiniz. Burada bilerek 2 boyutlu listeyi için tablo ismini kullandım, belki kafanızda daha kolay canlanır diye:

int tablo[7][7]; // Ya da int (*a)[7]

void islemYap(int a[][7]) {
     // Tablo aktiviteleri
}

islemYap(tablo);

Eğer işaretçi (pointer) ile parametre yollamak istiyorsanız, o zaman ayrı ayrı kolonları işaret eden listelere ihtiyacınız var. Ana değişken de bu işaretçileri tutuyor olacak. Bu yüzden her kolon için bir liste oluşturan bir for döngüsüne ihtiyacınız var:

int *tablo[7];

for(int i = 0; i < 7; i++){
     tablo[i] = new int[7];
}

void islemYap(int *a[7]){
     // Tablo aktiviteleri
}

islemYap(tablo);

En azında 2 boyutlu listeler için tavsiye etmediğim işaretçiyi işaret eden işaretçi anlamına gelen "**" ifadesini illa kullanmak isterseniz, üstte "int *isim[7]" şeklinde tanımlanan listeleri "int**" şeklinde tanımlayabilirsiniz. Tabii bu örnekte bu işlemi yaparsanız, for döngüsünde eleman atamak için kullanacağınız "int *[7]" şeklinde bir listeye yine ihtiyacınız olacaktır.

BENZER 7

Kimse etkileşime girmemiş

ETİKETLER