Bir bilgisayarın ana belleği veri saklanabilecek hücrelerden oluşur. Bu hücrelerin büyüklüğü bit sayısı ile ölçülür. Bir bitlik bir yer ikili sayı dizgesindeki 0 ya da 1 sayaklarından herhangi birisini yerleştirmeye yeterli bir alandır. Donanım dizgesine bağlı olarak, ana bellekte veri saklanabilecek hücrelerin büyüklüğü 8 , 16 , 32 , v.b. bit uzunluğunda olabilir. Hücrelerin bit uzunluğunun artmasi hız artırıcı bir etken olduğu gibi programcıya da daha geniş olanaklar sağlar. 8 bitlik bir hücreye bir byte denilir. Ev bilgisayarları genel olarak 8 bitlik bellek hücrelerine sahip makinalardır. Intel 8088 ya da 8086 mikroişlemciye sahip IBM PC ve ona uyumlu makinaların ana belleği 16 bitlik (2 bytlik) bellek hücrelerinden oluşur. Intel 80286, 80386 mikroişlemcili makinalarda ve büyük boy bilgisayarlarda 32 bitlik ana bellek hücreleri kullanılır.
Ana bellek hücreleri numaraları ile belirlidir. Donanım dizgesinin denetim birimi, bu hücreleri numaraları ile bilir. Programda bir değişken bildirimi yapılınca, denetim birimi ana bellekte o değişken türüne uyan bir yer ayırır. Bu yer, o türün gerektirdiği büyüklüğe ve donanım dizgesine bağlı olarak, bir byte ya da birçok byte’lık bir alan olabilir.
Pointer
Pointerler C dilinin güçlü öğeleridir. Bir pointer ana bellekte bir adres belirtir. Bazı dillerde ancak assembler dili yardımıyla çözülebilecek pekçok sorun C dilinde pointerler ile kolayca çözülebilir. Ayrıca adres kullanımı çok karmasik veri yapılarınin rahatlikla kullanilmasını sağlar.
Pointer kavramına yöneltilen eleştirilerden en önemlisi, C diline yeni başlayanlar için çok karmaşık görünmesi ve yazılan programın zor anlaşılır olmasıdır. Öte yandan, pointerleri kullanırken , aynı işi görecek biçimde çok değişik deyimler kullanılabilir. Bu nedenle, pointer kullanarak program yazarken, programcı bu haklı eleştiriyi gözardı etmeden, kolay okunur bir kaynak program yazmaya uğraşmalıdır.
Bir pointer, başka bir değişkenin adresini gösteren bir değişkendir. Dolayısıyla, aynen öteki değişkenler için olduğu gibi, programda kullanılmadan önce bildirimlenmelidir. Bildirim için, pointer değişkenine istenilen bir ad verilebilir; ancak bu adın önüne * simgesi konulur. Bir değişken önüne * simgesi konulunca, derleyici onu bir pointer olarak görmeye başlar.
\#include <iostream>
using namespace std;
int main () {
int var = 20; // actual variable declaration.
int \*ip; // pointer variable
ip = &var; // store address of var in pointer variable
cout << "Value of var variable: ";
cout << var << endl;
// print the address stored in ip pointer variable
cout << "Address stored in ip variable: ";
cout << ip << endl;
// access the value at the address available in pointer
cout << "Value of \*ip variable: ";
cout << \*ip << endl;
return 0;
}
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki gibi bir sonuç üretir -
Value of var variable: 20
Address stored in ip variable: 0xbfc601ac
Value of *ip variable: 20