using arrays with functions c
C ++ 'da İşlevlere Sahip Diziler Hakkında Bilmeniz Gereken Her Şey:
Bu eğitimde dizilerin C ++ 'daki fonksiyonlarla nasıl kullanılabileceğini tartışacağız. Genel olarak, diziler, değişkenleri işlevlere ilettiğimiz gibi işlevlere argüman olarak aktarılabilir.
Ancak diziler söz konusu olduğunda biçimsel parametrelerin değerlendirilmesi biraz farklıdır. Dizilerin fonksiyonlara geçişini gerçekten keşfetmeden önce, bir diziye işaretçi kavramını kısaca tartışmamız gerekir.
=> Derinlemesine C ++ Eğitim Öğreticilerine Buradan Bakabilirsiniz.
Ne öğreneceksin:
Bir Diziye İşaretçi
Fibonacci dizisinin ilk beş sayısını içeren aşağıdaki diziyi düşünün.
int fibSeq(5) = {1,1,2,3,5};
Bu diziyi gösterecek bir işaretçi fibPtr bildirelim.
int* fibPtr; fibPtr = fibSeq;
FibPtr içeriğini yazdırdığımızda, çıktı fibSeq dizisinin ilk elemanı olacaktır. Bunun nedeni, köşeli parantez içermeyen dizinin adının, dizinin ilk öğesine bir gösterici olarak değerlendirilmesidir. Dolayısıyla, yukarıdaki örnekte, 'fibSeq' adı, 'fibSeq' dizisinin ilk öğesine işaret etmektedir.
Aşağıda aynı şeyin resimli bir temsili bulunmaktadır:
Yukarıdaki resimli gösterimde gösterildiği gibi, fibPtr dizinin ilk elemanına işaret eder. Böylece, işaretçi aritmetiğini kullanarak, dizinin tüm elemanlarını sadece fibPtr kullanarak yazdırabiliriz.
Örneğin, ifade * (fibPtr + 1) dizinin ikinci elemanına işaret eder ve böyle devam eder.
cep telefonu için en iyi casus uygulaması
Bunu bir programa koyalım ve 'fibSeq' ve 'fibPtr' çıktılarını kontrol edelim:
#include #include using namespace std; int main() { int fibSeq(5) = {1,1,2,3,5}; int* fibPtr; fibPtr = fibSeq; cout<<'
fibSeq points to :'<<*fibSeq; cout<<'
fibSeq(0): '<<*fibPtr; cout<<'
fibSeq(1): '<<*(fibPtr + 1); cout<<'
fibSeq(2): '<<*(fibPtr + 2); cout<<'
fibSeq(3): '<<*(fibPtr + 3); cout<<'
fibSeq(4): '<<*(fibPtr + 4); } }
Çıktı:
fibSeq şunlara işaret eder: 1
fibSeq (0): 1
fibSeq (1): 1
fibSeq (2): 2
fibSeq (3): 3
fibSeq (4): 5
Yukarıdaki örnekte, bir işaretçi değişkeni fibPtr bildiriyoruz ve ardından dizinin adını fibPtr'ye atayarak diziyi göstermesini sağlıyoruz. Bunu yaptığımızda, fibPtr'yi dizinin ilk elemanına işaret ederiz. Sonra bir dizinin tüm değerlerini fibPtr kullanarak yazdırıyoruz.
Dizileri İşleve Aktarma
İşlevlerle uğraşırken, değişkenleri işleve geçirdiğimiz gibi dizileri işleve benzer şekilde geçiririz. Ancak () türündeki dizi değişkenini iletmiyoruz.
Bunun yerine, göstericiyi diziye, yani dizinin ilk elemanına işaret eden dizinin adını iletiriz. O zaman bu işaretçiyi kabul eden biçimsel parametre aslında bir dizi değişkenidir. İşaretçiyi geçerken, fonksiyonun içindeki diziyi doğrudan değiştirebiliriz.
Bir dizinin işleve geçişini göstermek için Fibonacci dizisindeki ilk beş öğenin her bir öğesinin karesini hesaplayan aşağıdaki programı düşünün.
#include #include using namespace std; void fibSeqSquare(int fibSeq()) { for(int i=0;i<5;i++) { fibSeq(i) *= fibSeq(i); } } int main() { int fibSeq(5) = {1,1,2,3,5}; fibSeqSquare(fibSeq); for(int i=0;i<5;i++) { cout<Yukarıdaki örnekte, bir Fibonacci dizisindeki her bir elemanın karesini hesaplıyoruz. Bu kare bir işlev içinde hesaplanır. Bu nedenle, işlevi main'den çağırırken dizi adını “fibSeqSquare” işlevine aktarıyoruz. Fonksiyonun içinde, her bir elemanın karelerini hesaplıyoruz.
Diziye gönderimi bir işaretçi yoluyla ilettiğimiz için, işlevin içindeki dizide ne tür değişiklikler yaparsak yapalım diziyi yansıtır. Dolayısıyla, diziyi main işlevinde yazdırdığımızda, çıktı olarak her elemanın karelerini elde ederiz.
Yukarıdaki örnekte, fibSeqSquare fonksiyonunun dizi bağımsız değişkeninin (biçimsel parametre) dizinin boyutunu değil, bunun bir dizi olduğunu belirtmek için köşeli parantezleri (()) belirttiğini gördük. Bu, dizi bağımsız değişkenlerini belirtmenin bir yoludur.
Biçimsel parametre listesindeki dizi bağımsız değişkenini belirlemenin bir başka yolu, köşeli parantezler içindeki dizinin boyutunu belirlemektir. Her iki argüman da benzer şekilde çalışır. Bunlar, dizi argümanlarını belirlemenin iki yolu.
Aşağıdaki örnek, boyut ile belirtilen bir Array bağımsız değişkenini gösterir.
#include #include using namespace std; void displayFibSeq(int fibSeq(5)) { for(int i=0;i<5;i++) { cout<Yukarıdaki örnek, Fibonacci dizisini göstermek için bir işleve sahiptir. İşlevin dizi olarak bir parametresi vardır, burada ayrıca dizinin boyutunu da belirledik.
Çok boyutlu dizileri de yukarıda gösterildiği gibi fonksiyonlara geçirebiliriz.
mobil test mülakat soruları ve cevapları pdf
Dizileri İşlevlerden Döndürme
İşlevden bir dizi döndürmeye gelince, C ++ işlevden tam bir dizi döndürmemize izin vermez. Bununla birlikte, diziye bir gösterici döndürmek için bir işlev yapabiliriz. Ama içinde bir püf noktası var.
Aşağıdaki kod parçasını düşünün:
int* funcArray() { int arr(3) = {1,2,3}; return arr; } int main() { int* aryPtr = funcArray(); cout< Yukarıdaki program göstericiyi işlevden bir dizinin ilk öğesine döndürse de beklendiği gibi çalışmaz. Programın bize doğru çıktıyı vereceğini garanti edemeyiz. Doğru çıktı verebilir veya vermeyebilir.
pc için en iyi ücretsiz mp3 indirici
Bunun nedeni, yerel değişkeni işlevden döndürüyor olmamız ve döndürüldüğünde kapsam içinde olup olmayacağından emin değiliz.
Bu nedenle, kısaca, C ++ dizilerin işlevlerden döndürülmesini desteklemez.
Eğer fonksiyondan dizi döndürmemiz gerekiyorsa, aşağıdaki yöntemlerden herhangi birini kullanmamız gerekir:
# 1) Dinamik Olarak Ayrılan Dizileri Döndürme
Dinamik olarak ayrılmış diziden dizi göstericisini döndürebiliriz. Diziyi dinamik olarak tahsis etmek için 'yeni' operatörünü kullanırız. Dinamik bir dizi olduğu için, diziyi 'silmedikçe' kapsam dahilinde olacaktır. Dolayısıyla, diziyi döndürdüğümüzde program iyi çalışacaktır.
Bu, aşağıdaki Örnekte gösterilmektedir.
#include #include using namespace std; int* funcArray() { int* arr = new int(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< Çıktı:
1 2 3
# 2) Statik Dizileri Geri Getirme
Statik değişkenler / diziler program boyunca kapsama sahip olduğundan, işlevlerden statik diziler de döndürebiliriz. Bunu göstermek için bir örnek alabiliriz. Bu, bu örnekte dinamik olarak ayrılmış dizi yerine statik bir dizi kullanmamızın tek farkı ile önceki örnekle aynıdır.
#include #include using namespace std; int* funcArray() { static int arr(3); arr(0)=1; arr(1)=2; arr(2)=3; return arr; } int main() { int* aryPtr = funcArray(); cout< Çıktı:
1 2 3
Not : Diziyi içine sarmak için bir yapı da kullanabiliriz ve sonra o yapıyı döndürebiliriz. Bu şekilde, doğal olarak bir fonksiyondan bir dizi döndüreceğiz. Ancak bu, dizileri döndürmek için pek uygun bir yöntem değildir.
Sonuç
Bu nedenle, bu eğitimde, dizileri fonksiyonlara göre ayrıntılı olarak tartıştık. Bu öğreticinin C ++ dizileri ve işlevleriyle ilgili tüm şüpheleri ve yanlış anlamaları gidermeye yardımcı olacağını umuyoruz.
=> Mükemmel C ++ Eğitim Kılavuzuna Buradan Göz Atın.
Önerilen Kaynaklar