# C++ Değişkenler

C++ Değişkenler (Variables) konusunu işliyoruz.
Değişkenler, programlarımızdaki verilerin tutulduğu adlandırılmış bellek alanlarıdır. C++’daki her değişken, değişkenin belleğinin boyutunu ve düzenini belirleyen özel bir türe sahiptir. Aşağıdaki ifadeleri sağlayacak şekilde tanımlaması yapılabilir.
Bir değişkenin adı harfler(ANSI standartlarında) , rakamlar ve alt çizgi karakterinden oluşabilir.
Bir harf veya alt çizgi ile başlamalıdır. Büyük ve küçük harfler farklıdır, çünkü C++ büyük / küçük harfe duyarlıdır.
C++ program deyimleri deyimleri dışındaki ifadeler değişken ismi olarak kullanılabilir.(Örn int değişken adı olarak kullanılmaz)
Önceki C++ Syntax dersinde bu veri türlerinden bahsetmiştik. Aşağıdaki veri tanımlayıcıları ile değişken tanımlaması yapılır.
Sıra
Tip ve Tanımı
Tanımı
1
bool
true /false boolean değer alır.
2
char
Bir bytelık veri alan tam sayı türüdür.
3
int
Doğal tam sayı veri türüdür.
4
float
Ondalıklı sayı türü.
5
double
Daha geniş ondalıklı sayı türü.
6
void
Dönüş olmadığını temsil eder.
7
wchar_t
Geniş bir karakter türü.
C++ ayrıca Enumeration, Pointer, Array, Reference, Data structure, ve Classtürlerini tanımlamaya da izin verir.
Aşağıdaki işlemler bir değişken nasıl tanımlanıp kullanılacağını kapsamaktadır.

1. C++ Değişken Tanımlama

Bir değişken tanımlaması derleyiciye değişken için ne kadar alan oluşturulacağını söyler. Bir değişken tanımlaması değişken tipi, değişken adı ve varsa eşittir(=) ile değişkenin aldığı değer olacak şekilde tanımlanır.
tip degisken_listesi;
tip degisken_adi = deger;
Örnek olarak:
int yas;
string isim = "Ali";
int a, b, c = 10;
char cins, karakter;
float sicaklik, maas;
double degisken;

2. Değişkene Değer Verme Çeşitleri

Direkt değer verme daha iyi performans gösterebilir. Ayrıca birkaç güçlü yana sahiptir. Bunun dışında direct initialization sayesinde atama ve ilk değer verme işlemlerini birbirinden daha rahat ayırabiliriz.
int x = 5 // Copy initialization
int y(10); // Direct initialization
int z{5}; // Uniform initialization (C++11)
Uniform initialization bir takım sebeplerden dolayı diğer iki tanımlamadan daha iyidir. Diğer iki tanımlama türüyle veri listeleri tanımlanamaz. Boş bir süslü parantez ile tanımlanan veri otomatik olarak sıfır değerini alır.
int a{6}; //Calisir
int b{}; //Calisir, sifir degeri alir.
int c{5.5} // Derleyici hata atar. integer degisken double deger alamaz.
İlk olarak bir değişken oluşturarak ardından bu boş değişkene değer atayabilirsiniz.
bool degisken;
degisken = false; // Kopyalayarak atama
C++ dilinde değişkenlere varsayılan olarak değer ataması yapılmaz. Eğer programcı tarafından değer ataması yapılmamışsa değişken ramde saklandığı yerin önceki verisini tutmaya devam eder.

3. Çoklu Değişken Tanımlama

Tek satırda birden çok değişken oluşturabilirsiniz. Bu sayede daha az satırla daha hızlı tanımlamalar yapabilirsiniz.
int a,b,c; // Uygun
/* Uygun */
int a;
int b;
int c;
int a(5), b{4}, c = 0; Uygun
int a, int b; // derleme hatası

4. Yerel Değişkenler

Bir fonksiyon veya blok içinde bildirilen değişkenlerdir. Sadece bu fonksiyon yada blok içinde kullanılabilirler. Yerel değişkenler kendi fonksiyonları dışında çalışmamaktadırlar. Aşağıdaki kullanım örneğini inceleyin.
#include <iostream>
using namespace std;
int main () {
// main fonksiyonu icinde tanimlanan yerel degisken
int a, b, c;
// deger atamasi
a = 10;
b = 20;
c = a + b;
cout << c;
return 0;
}

5. Global Değişkenler

Global değişkenler, genellikle programın üstünde yer alan tüm fonksiyonların dışında tanımlanır. Global değişkenler, programınızın ömrü boyunca değerlerini koruyacaktır.
Global bir değişkene herhangi bir fonksiyon erişilebilir. Yani, global bir değişken, bildiriminin tamamlanmasından sonra tüm programınızda kullanılabilir. Aşağıda, global ve yerel değişkenleri kullanan örnek verilmiştir.
#include <iostream>
using namespace std;
// Global tanimlama
int g;
int main () {
// Local tanimlama
int a, b;
// deger atama
a = 10;
b = 20;
g = a + b;
cout << g;
return 0;
}
Dikkat: Bir program yerel ve global değişkenlere aynı anda sahip olabilir, ancak bir fonksiyon içindeki yerel değişkenin değeri tercih edilir.
#include <iostream>
using namespace std;
// global
int g = 20;
int main () {
// local
int g = 10;
cout << g; //cikti 10 olacaktir
return 0;
}
Dikkat: Yerel bir değişken tanımlandığında, sistem tarafından otomatik başlatılmaz, bunu kendiniz başlatmanız gerekir. Global değişkenler tanımlandığında, sistem tarafından otomatik olarak ilk değer ataması yapar. (İlk değer ataması yapılmadığında oluşacak durum)
Veri Tipi
Başlangıç değeri
int
0
char
‘\0’
float
0
double
0
pointer
NULL

6. Statik Değişkenler

Program işlediği sürece bellekte kendisine belirli bir yer ayrılan değişken türüdür. Program çalışma süresince sadece bir kere tanımlanır. Örneğin bir fonksiyon içerisindeki bir statik değişken fonksiyon ne kadar çağrılırsa çağrılsın bir kez tanımlanır.
C++
Program Çıktısı
#include <iostream>
void ArttirVeYazdir()
{
static int s_deger = 1;
// Degisken statiktir.
++s_degisken;
std::cout << s_degisken << std::endl;
} // s_degisken yok edilmedi.
int main()
{
ArttirVeYazdir();
ArttirVeYazdir();
ArttirVeYazdir();
}
2
3
4

7. Auto Deyimi

Auto deyimi eğer değişken tanımlanırken değer alıyorsa kullanılır. Örneğin bir double değişkene 5.5 değerini vereceksek derleyici tanımlayacağımız değişkenin zaten double olduğunu çözebilir. Örneğin:
double x{ 5.6 }; //Derleyici 5.6'nin double literal oldugunu biliyor.
auto x{ 5.6 }; //Yukaridakiyle ayni is yapilir. Derleyici x'in double oldugunu biliyor.
auto kullanıldığı zaman, derleyiciye, tanımlanan değişkenin atanacak değerin türü olacağı bildirilir. Bu işlem fonksiyon parametreleri için kullanılmaz. Örneğin:

8. C++ extern Değişken Tanımlama

Bir değişken beyanı derleyiciye verilen tip ve isimde bir değişken bulunduğunu ve böylece derleyicinin değişken hakkında tam bir ayrıntıya ihtiyaç duymadan daha fazla derleme için ilerlediğini garanti eder. Bir derleme bildiriminin yalnızca derleme sırasında anlamı vardır, derleyici programa bağlandığı sırada gerçek değişken tanımına ihtiyaç duyar.
Değişken bildirimi, birden fazla dosya kullandığınızda ve değişkeninizi, programın bağlandığı sırada kullanılabilen dosyalardan birinde tanımladığınızda kullanışlıdır. Herhangi bir yerde bir değişken bildirmek için extern anahtar sözcüğünü kullanmalısınız. C++ farklı bloklarda bir değişkeni birden çok kez bildirme imkanı sunar, ancak bir dosyada, bir işlevde veya bir kod bloğunda yalnızca bir kez tanımlanabilir.
#include <iostream>
using namespace std;
// Degisken tanimlama
extern int a, b;
extern float f;
int main () {
int a, b;
float f;
// deger atama
a = 10;
b = 20;
cout << "toplam :" << a + b << endl ;
f = 50.0/3.0;
cout << "ondalik :" << f << endl ;
system("PAUSE");
return 0;
}
Aynı kavram, function beyanı sırasında da yapılır. Function beyanı önce yapılıp, fonksiyon her hangi bir yerde tanımlanabilir. Aşağıdaki örnek bu kavramı açıklamaktadır.
#include <iostream>
using namespace std;
// function beyani
int ornek();
int main() {
// function cagirma
int i = ornek();
}
// function tanımlama
int ornek() {
return 125;
}