Pointer etiketine sahip kayıtlar gösteriliyor.
Pointer etiketine sahip kayıtlar gösteriliyor.

C Programlama Gösterge (Pointer) Kavramı

Değişkenlerin kapladıkları hücrelerin adreslerini saklamak için başka değişkenler de kullanabiliriz. Bu değişkenlere gösterge adı verilir. Göstergeler, diğer değişkenler gibi, sayısal bir değişkenlerdir. Bu sebeple kullanılmadan önce program içinde bildirilmelidir. 

Sözdizimi :   tip_adı *gösterge_adı;

int *bayraktar;
float *x, *y, *z

Gösterge Operatörleri ( & ve *) : "&" değer atama operatörüdür. Örneğin bayraktar = &y; ifadesinde y değişkenini gösteren bayraktar göstergesidir. "*"  yönlendirme operatörünün göstergeyi tanımlamanın dışında bir görevi daha vardır. Örneğin *bayraktar ifadesi, bayraktar'ın gösterdiği hücrenin içeriğine ulaşmak içinde kullanılabilir. *bayraktar = 66; gibi…

Bir göstergenin bellekte herhangi bir hücreyi göstermesini istemediğimiz zaman NULL isimli sabit kullanılır. NULL göstergenin bellekte hiç bir yeri göstermediğini belirten 0 değeridir.
int *bozok = NULL;

Dinamik Bellek Kullanımı: Programın çalışması esnasında özel komutlar kullanarak bellekten yer alınıp kullanılmasına dinamik bellek kullanımı adı verilir. Dinamik değişkenler için bellekte ayrılan yere yığın (heap) adı verilir. Dinamik bellek kullanımını new ve delete komutları ile gerçekleştiririz..

new komutu ile bellekten istediğimiz veri Npi boyutunda bir yer alabiliriz.
int *ornek; //ornek adlı tamsayı gösterecek bir gösterge tanımlıyoruz.
ornek = new int; //bellekten tamsayı kadar yer ayrılır, bu yerin adresi burada ornek'e aktarılır.
*ornek = 9; //bellekten alınan yeni yere 9 atanır.

int *bozok=new int(9); //değişken tanımlanması esnasındada ilk ataması yapılabilir.

Dinamik bir Dizi Oluşturalım ve tekrar bellekten Silelim :
int *ornekdizi; //ornekdizimiz tamsayı gösterecek şekilde tanımlanır.
ornekdizi=new int[10]; //bellekten 10 tamsayı dizisi için yer tahsis edilir ve dizinin adresi ornekdizi'ye atanır.
ornekdizi[2]=16; //bellekten alınan dizinin 1.indeksteki elemanına 15 atanır.
Bellekten new ile aldığımız yerler, kullanımları sona erdiğinde yeniden kullanılamazlar. Bu nedenle bellekten aldığımız hücreleri program bitmeden delete komutu ile silmemiz gerekir.

int *bozok=new int; //bozok göstergesine tamsayı boyutunda yerin adresi atanır.
*bozok=16; //bozok göstergesinin gösterdiği yere 16 atanır.
cout<<*bozok; //atanan 16 değeri yazdırılır.
delete bozok; //ayrılan yer belleğe geri döndürülür.

int *ornekdizi; //ornekdizi adında tamsayı gösterecek bir gösterge tanımlanır.
ornekdizi=new int[8]; //bellekten 8 tamsayı dizisi için yer ayrılır ve dizinin adresi ornekdizi'e atanır.

ornekdizi[1]= 13; //bellekten alınan dizinin 1.indeksteki elemanına 13 atanır.
delete [] ornekdizi; //oluşturulan dizinin tüm elemanları belleğe geri döndürülür.

Örnek:
#include <stdio.h>
#include <conio.h>
#include <cstdlib>
#include <iostream>

using namespace std;

void oku(int[],int);
int main(int argc, char *argv[])
{
   int mevcut, toplam=0;
   int max=0;
   int *notlar;
   cout<<"Sinif mevcudunu Giriniz: ";
   cin>>mevcut; //Sınıf mevcudunu okuyoruz
   notlar=new int[mevcut]; //Sınıf mevcudu kadar dinamik dizi yaratıyoruz
   oku(notlar,mevcut);

   for(int i=0; i<mevcut;i++)
   {
           toplam+=notlar[i];
           if (notlar[i]>max)
           max=notlar[i];
   }
   cout<<"Sinif Ortalamasi= "<<toplam/mevcut<<endl;
   cout<<"En yuksek not = "<<max<<endl;
   delete [] notlar;
   getch();
}
void oku(int notDizi[], int boyut) //Notları okuduğumuz fonksiyon
{
     cout<<"Notlari Giriniz:";
     for(int i=0; i<boyut;i++)
             cin>>notDizi[i];
}

C Programlama Veri Tipleri

C Programlama 

C Veri Tipleri (Data Types)
Önceki derslerde C Programlama Dilin'de tanımladığımız her bir değişkenin bir tipi olması gerektiğini öğrenmiştik. 


Temel Veri Tipleri (Primary Data Type )
  • char : karakter
  • int : tamsayılar
  • float : ondalıklı gerçek sayı (6.basamağa kadar hassasiyet)
  • double : ondalıklı gerçek sayı (10. basamağa kadar hassasiyet)
  • void : boş veri tipi
C Programlama Dilin'de temel veri tiplerinin yanı sıra birde özel veri tipleri bulunmaktadır.

Özel Veri Tipleri (Secondary Data Type)
  • array : dizi
  • pointer : işaretci
  • structure : veri yapısı
  • enum : sıralanmış değerler
  • union: farklı tür ve boyutlardaki veriler
Temel Veri Tipleri (Primary Data Type ) 

CHAR Veri Tipi : Karakter değişkenlerini tutmak için tasarlanmış veri tipidir. char veri tipinde değişkenler  bellekte 1 byte alan kaplamaktadırlar. char veri tipi karakter değişkenlerini saklamasına rağmen sayısal bir veri tipidir. Çünkü C Programlama Dilinde her karakterin sayısal bir karşılığı vardır.En basit anlatımla karakterlerin sayısal karşılıkları American Standart Kodlaması olarak bilinen ASCII (American Standart Code for Information Interchange) tablosudur. ASCII kodlama tablosu sadece C diline özgü değil bütün programlama dillerinde karakterlerin sayısal karşılığını tutmak için kullanılmaktadır.
Table of ASCII Characters
ASCII Tablosu
ASCII tablosunda 72 sayısının H karakterine 104 sayısınında h karakterine karşılık geldiğini görmekteyiz. Örneğin char ornekch = 'H' ifadesinde ornekch isimli karakter değişkene ASCII tablosunda H harfinin karşılığı 40 sayısını atamaktadır. Yazmış olduğumuz kod parçasında görüldüğü gibi karakter değeri tek tırnak işaretleri arasındadır. Aynı şekilde  chat ornekch = '72' yazım şekliylede ornekch isimli karakter değişkene atama yapabiliriz. char tipindeki değişkenlerin ASCII karşılığını printf fonksiyonuyla yazdırmak istediğimizde %c niteleyicisini kullanmalıyız.
printf("ornekch degiskeninin karakter degeri:%c\n",ornekch);