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.
#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
Ö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
Comments