C++ ile Pointer Kullanımı

C++ ile Pointer Kullanımı

Herkese merhabalar, Bu yazımızda C++ ile Pointerlar konusuna değineceğiz. Pointerların amaçlarını and neler yapabileceğimizi QT Frameworku kullanarak geliştirdiğimiz örnekte göreceğiz.

Hadi Başlayalım.

İlk olarak bu makale yandaki makaleden çeviridir. Yandki linki ile orjinaline ulaşabilirsiniz : Explanation of Pointers in C++

Tanımlanan herbir değişken bellekte tutulur ve bu değişkenlerin bellekte bir adresi vardır. Normalde geliştirici bu adresler ile çalışmaz, direk olarak değişkenin kendi değeri ile çalışır. Program başlatıldığında değişkenler otomatik olarak bu adreslere yazılır ve CPU bu adreslere erişerek değişkenleri kullanır. Bazen geliştiricilerde bu adreslere ihtiyaç duyar ve pointerlar aracılığı ile erişmelerine olanak tanınmış olunur.

Değişkenlerin adreslerine erişebilmek için (&) operatörü kullanılır.

Şimdi örneğimize başlayalım. ve kütüphanelerimizi ekleyelim.

#include <QCoreApplication>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

   int  var_1;
   bool var_2;

   cout << "Address of var_1 is " << &var_1 << endl ;
   cout << "Address of var_2 is " << &var_2 << endl;

    return a.exec();
}

Aşağıdaki program çıktısında değişkenlerin adressleri görülmektedir.


Address of var_1 is 0059F990
Address of var_2 is 0059F99B

Bu değerler progam her çalıştırıldığında değişecektir. Çünkü değişkenler bellekteki adreslere otomatik olarak o andaki uygun olan adrese yazılır.

Peki pointerlar nedir?

Pointerlar değişkenin adreslerini tutan bir değişken tipidir. Değişkenleri normal olarak tanımlarız ve pointerları ise (*) operatörunu kullanarak tanımlarız. Aşağıda bir pointerın nasıl tanımlandığını görebilirsiniz.


int  *p_int_var;   //bir integer pointer 
bool *p_bool_var;  //bir bool pointer

Pointerlara değişken değerlerini atayamazsınız. Aynı tipteki veriler bile olsa. Sadece adres atayabilirsiniz. Pointerların değerlerini okumaya çalıştığınızda ise onların addresslerine erişmiş olursunuz. Eğer belirtilen adresin değerlerine erişmek isterseniz unary operatörü (*) size yardımcı olacaktır.

Aşağıdaki örneği inceleyiniz:


cout << "Pointer tanımlama ve kullanma : " << endl;

int  *p_int_var;   //integer pointer
bool *p_bool_var;  // bool pointer

var_1 = 33;
var_2 = true;

p_int_var = &var_1;
p_bool_var = &var_2;

cout << "var_1 değeri: " << var_1 << ", Adresi : " << p_int_var << endl;
cout << "var_2 değeri: " << var_2 << ", Adresi : " << p_bool_var << endl;

cout << " p_int_var adresi : " << p_int_var << " , değeri :  " <<*p_int_var << endl;
cout << " p_bool_var adresi : " << p_bool_var << " , değeri :  " <<*p_bool_var << endl;

Program çıktısı aşağıdaki gibi olacaktır:


Pointer tanımlama ve kullanma :
var_1 değeri: 33, Adresi : 00AFFC48
var_2:  değeri1, Adres : 00AFFC4F
p_int_var adresi : 00AFFC48 , değeri:  33
p_bool_var adresi : 00AFFC4F , değeri :  1

Pointerlar ile bazı aritmetik işlemlerde yapabilirsiniz. Pointerları unary operatörü(*) ile kullanmanız gerekmektedir. Aşağıdaki örnekte bunu görebilirsiniz.


cout << " Pointerlar ile aritmetik İşlemler : " << endl;

int num1 = 33, num2 =44;
    
int *p_num1 = &num1;
int *p_num2 = &num2;

int sum = (*p_num1) + (*p_num2);
int multiply = (*p_num1) * (*p_num2);
    
cout << "Toplamanın sonucu : " << sum << " , ve çarpmanın sonucu : " << multiply << endl;

Aşağıda program çıktısını görebilirsiniz:


Pointerlar ile aritmetik İşlemler :
Toplamanın sonucu : 77 , ve çarpmanın sonucu : 1452

Aşağıdaki Program çıktısında yukarıdaki örnekleri görebileceksiniz. (ORJİNAL MAKALEDEN ALINTIDIR):

C++ ile Pointer örneği program çıktısı

Örnek uygulamaya Github üzerinden yandaki link ile ulaşabilirsiniz : https://github.com/thecodeprogram/PointersCpp_Example

Bu yazımızda bu kadar.

Sağlıklı günler dilerim.

İyi değişken işaretlemeler.

Burak Hamdi TUFAN


Tags


Share this Post

Send with Whatsapp

Post a Comment

Success! Your comment sent to post. It will be showed after confirmation.
Error! There was an error sending your comment. Check your inputs!

Comments

  • There is no comment. Be the owner of first comment...