Bir Işleve Bir Dizi Nasıl Geçirilir

İçindekiler:

Bir Işleve Bir Dizi Nasıl Geçirilir
Bir Işleve Bir Dizi Nasıl Geçirilir

Video: Bir Işleve Bir Dizi Nasıl Geçirilir

Video: Bir Işleve Bir Dizi Nasıl Geçirilir
Video: Üç Kuruş 2. Bölüm Ön İzleme 2024, Mayıs
Anonim

Diziler, bilgisayar programlarında en çok kullanılan yapılandırılmış veri depolama biçimlerinden biridir. Bunların işlenmesi, sınıf yöntemlerinde ve işlevlerinde uygulanan çeşitli algoritmalarla yapılabilir. Buna göre, genellikle bir diziyi bir işleve geçirmek gerekir. C ve C++ dilleri, bu eylemi gerçekleştirme yöntemlerini seçme konusunda büyük özgürlük sunar.

Bir işleve bir dizi nasıl geçirilir
Bir işleve bir dizi nasıl geçirilir

Bu gerekli

C ve C++ dillerinin derleyicileri

Talimatlar

Aşama 1

İşleve sabit boyutlu bir dizi iletin. Uygun tipte bir argüman içerecek şekilde fonksiyonun prototipini değiştirin. Örneğin, parametre olarak üç öğenin bir dizi tamsayı sayısal değerini alan bir işlevin bildirimi şöyle görünebilir:

void ArrayFunction (int aNumbers [3]);

Böyle bir işlev, bir diziyi doğrudan ona argüman olarak ileterek çağrılır:

geçersiz SomeFunction ()

{

int aSayılar = {1, 2, 3};

ArrayFunction (aNumbers);

}

Aktarılan veriler yığına kopyalanır. Çağrılan işlevde diziyi değiştirmek, kaynağı değiştirmez.

Adım 2

Değişken uzunluklu dizileri işleve iletin. Bunu yapmak için, karşılık gelen argümanın boyutunu belirtmeniz yeterlidir:

void ArrayFunction (int aNumbers );

Çok boyutlu diziler de benzer şekilde geçirilebilir (yalnızca ilk "boyut" değişken olabilir):

void ArrayFunction (int aNumbers [3] [2]);

Bu işlevler, ilk adımdakiyle aynı şekilde çağrılır.

Bir işlevde değişken uzunluktaki dizileri doğru bir şekilde işleyebilmek için, öğelerinin sayısını ek bir parametre aracılığıyla açıkça iletmeniz veya öğelerin kendi değerlerine (belirli bir değer) kısıtlamalar getiren kuralları kullanmanız gerekir. dizinin sonunun bir işareti olmalıdır).

Aşama 3

Diziyi işaretçi ile iletin. İşlev argümanı, dizinin öğelerine karşılık gelen bir türe sahip bir değere işaretçi olmalıdır. Örneğin:

void ArrayFunction (int * pNumbers);

Bir işlevdeki verilere erişim, hem dizi öğeleriyle çalışma gösteriminde hem de adres aritmetiği kullanılarak gerçekleştirilebilir:

void ArrayFunction (int * pNumbers)

{

pNumaralar [0] = 10; // 0 elemanına erişim

* (pSayıları + 1) = 20; // 1. öğeye erişim

}

Dikkatli ol! İşlev, verilerin bir kopyası değil, ona bir işaretçi iletildiğinden, orijinal dizi değiştirilecektir.

Bu yöntemin avantajı hız, hesaplama kaynaklarının ekonomisi ve belirli bir esnekliktir. Böylece, hedef işlevi, dizinin rastgele bir öğesine bir işaretçi ileterek çağırabilirsiniz:

geçersiz SomeFunction ()

{

int aSayılar = {1, 2, 3};

ArrayFunction (aNumbers); // tüm dizi

ArrayFunction (& aNumber [1]); // ikinci elemandan başlayarak

}

Bu yöntem ayrıca genellikle kullanılabilir öğelerin sayısını ek bir parametrede geçirmeyi veya bir dizi sonlandırıcı kullanmayı içerir.

4. Adım

Dizi işlevselliğini uygulayan sınıfın bir nesnesine başvuru veya nesne olan bir parametreye sahip bir işleve veri iletin. Bu tür sınıflar veya sınıf şablonları genellikle popüler kitaplıklarda ve çerçevelerde bulunur (Qt'de QVector, MFC'de CArray, STL'de std:: vector, vb.).

Genellikle bu sınıflar, yalnızca veriler değiştirildiğinde (yazma sırasında kopyalama) derin bir kopyalama gerçekleştirerek referans sayımıyla örtük bir veri paylaşım stratejisi uygular. Bu, dizi nesnelerinin işlev ve yöntemlerin bağımsız değişkenleri aracılığıyla değere göre geçirilmesi durumunda bile hesaplama kaynaklarının tüketimini en aza indirmenize olanak tanır:

void ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count();

int nItem = oArray [0];

}

geçersiz SomeFunction ()

{

QVektör oArray (10);

for (int ben = 0; ben

Önerilen: