Cpp Fonksiyon Parametreleri: Dizi ve Pointer Kullanımı

43 Kişi Okudu

Cpp Fonksiyon Parametreleri: Dizi ve Pointer Kullanımı,

Cpp Fonksiyon Parametreleri: Dizi ve Pointer Kullanımı
Cpp Fonksiyon Parametreleri: Dizi ve Pointer Kullanımı

C++ dilinde fonksiyon parametreleri olarak diziler ve pointer’lar kullanmak yaygın bir pratiktir. Ancak, dizi parametreleri ve pointer’lar arasındaki farkları anlamak, kodunuzu daha okunabilir ve bakımı daha kolay hale getirebilir. Bu yazıda, dizi ve pointer parametrelerinin farklarını açıklayacağız ve bu durumu kod örnekleriyle destekleyeceğiz.

C++’da Dizi Parametresi Olarak Geçmek

Bir fonksiyon parametresi olarak dizi kullanırken, dizi boyutunu da belirtebilirsiniz. Bu, fonksiyonun belirli bir boyutta bir dizi beklediğini açıkça belirtir. Dizi parametresi kullanmak, kodun daha okunabilir olmasını sağlar ve fonksiyonun hangi boyutta bir dizi beklediği hakkında bilgi verir.

#include <iostream>

#define PACKET_LENGTH 256

struct Packet_t {
    // İçerik burada
};

class DataProcessor {
public:
    void processData(Packet_t &packet, uint8_t data[PACKET_LENGTH]);
};

void DataProcessor::processData(Packet_t &packet, uint8_t data[PACKET_LENGTH]) {
    // Fonksiyonun içeriği burada
    std::cout << "Dizi boyutu: " << PACKET_LENGTH << std::endl;
    // Örnek işlem: diziyi yazdırmak
    for (int i = 0; i < PACKET_LENGTH; ++i) {
        std::cout << static_cast<int>(data[i]) << " ";
    }
    std::cout << std::endl;
}

int main() {
    DataProcessor processor;
    Packet_t packet;
    uint8_t data[PACKET_LENGTH] = {0};

    processor.processData(packet, data);

    return 0;
}

C++’da Pointer Parametresi Olarak Geçmek

Bir fonksiyon parametresi olarak pointer kullanmak, fonksiyonun bir dizinin başlangıç adresini beklediğini belirtir. Pointer parametresi kullanmak, dizi boyutu hakkında bilgi içermez ve bu nedenle kodun esnekliği artar, ancak belirli bir boyut garantisi vermez.

#include <iostream>

#define PACKET_LENGTH 256

struct Packet_t {
    // İçerik burada
};

class DataProcessor {
public:
    void processData(Packet_t &packet, uint8_t *data);
};

void DataProcessor::processData(Packet_t &packet, uint8_t *data) {
    // Fonksiyonun içeriği burada
    std::cout << "Dizi boyutu: " << PACKET_LENGTH << std::endl;
    // Örnek işlem: diziyi yazdırmak
    for (int i = 0; i < PACKET_LENGTH; ++i) {
        std::cout << static_cast<int>(data[i]) << " ";
    }
    std::cout << std::endl;
}

int main() {
    DataProcessor processor;
    Packet_t packet;
    uint8_t data[PACKET_LENGTH] = {0};

    processor.processData(packet, data);

    return 0;
}

Dizi ve Pointer Parametrelerinin Farkları

  1. Deklarasyon Farkı:
    • void processData(Packet_t &packet, uint8_t data[PACKET_LENGTH]): Bu bildiride data sabit boyutlu bir dizi olarak belirtilmiştir.
    • void processData(Packet_t &packet, uint8_t *data): Bu bildiride data açıkça bir pointer olarak belirtilmiştir.
  2. Derleyici Yorumu:
    • Her iki bildirim de derleyici tarafından aynı şekilde yorumlanır çünkü diziler fonksiyon parametreleri olarak iletildiğinde, aslında pointer olarak geçirilirler.
  3. Kullanım ve Anlam:
    • İlk bildirim, fonksiyonun belirli bir boyutta bir dizi beklediğini belirtir, bu da kodun daha anlaşılır olmasını sağlar.
    • İkinci bildirim ise yalnızca bir pointer beklediğini belirtir ve dizi boyutu hakkında bilgi vermez.

Sonuç

Her iki bildirim de fonksiyonun içindeki uygulama açısından aynı şekilde çalışacaktır. Ancak, ilk bildirimin daha açıklayıcı olduğu ve fonksiyonun beklediği parametre türü hakkında daha fazla bilgi sunduğu söylenebilir. Kodunuzu yazarken hangi bildirimi kullanacağınıza karar verirken, kodun okunabilirliğini ve anlaşılabilirliğini göz önünde bulundurmalısınız.

Yayınlayan

Ahmet Yasin CİVAN

Mekatronik Mühendisi, Gömülü Yazılım Geliştiricisi.