İçeriğe atla

İşaretçi (bilgisayar programlama)

Programlama dillerinde işaretçi, bellek adresi tutmak için tasarlanmış bir türdür.

İşaretçiyi anlamada, bir benzetim olarak kitap ayracı örneği verilebilir. Ayraç bir kitap sayfasına yerleştirilir, burada sayfa numarası bir bellek adresi, ayraç ise bir işaretçidir. Sayfa içeriğine erişmek için doğrudan ayracın bulunduğu sayfa açılabilir.

Bir değişken tanımlandığında, bellekte ona bir yer ayrılır. İşaretçiler bu bellek alanının başlangıç adresini tutar. a tam sayı değişkeni tanımlandığında, atandığı adresin başlangıcından değişkenin türünün boyu kadar bellekte yer kaplar. Değişkene atanan değer, ayrılan bu bellek alanında tutulur.

Değişken adı  Bellek Alanı    Bellek Adresi   C kodu
             ---------------
             -             -                  int a = 5;
     a       -    5        -    
             -             -
             ---------------  0x0000ffff

İşaretçi türünde bir pIa (pointer to integer a, a'yı gösteren bir tam sayı işaretçisi) değişkeni tanımlanır ve a değişkeninin adresi atanırsa, pIa a'nın adresini değer olarak tutar:

Değişken adı   Bellek Alanı   Bellek Adresi   C kodu
             ---------------
             -             -                  int* pIa = &a;
   pIa       - 0x0000ffff  -
             -             -
             ---------------  0xfe371fde2

a değişkeninde yapılan her değişiklik, pIa işaretçi değişkenine görünür. İşaretçi kullanılarak a'nın değeri okunabilir veya değiştirilebilir.

Değişken adı  Bellek Alanı    Bellek Adresi   C kodu
             ---------------
             -             -                  *pIa = 23;
     a       -    23       -    
             -             -
             ---------------  0x0000ffff

Türünden bağımsız olarak bir işaretçi değişkeninin değeri her zaman bir sayıdır (bir bellek adresi). İşaretçinin türü, tutulan adresteki verinin nasıl yorumlanacağını belirtir. Buna göre int* türündeki pIa, tuttuğu adresteki veriyi int olarak yorumlayacaktır.

Bu durumun bir istisnası void* dır. void* türündeki bir değişken, bir adres tutar fakat bu adresteki veriyi yorumlamaz, kullanıcının istediği türde cast kullanması beklenir.

İşaretçiler, dinamik bellek tahsisi, özyinelemeli veri yapısı gerçeklenimi, büyük boydaki veriye hızlı erişim, hafızada ardışık (sequential) tutulan verilerin iterasyonu, nesne yaşam süresi işlemleri, donanım adresine erişim gibi pek çok yerde karşımıza çıkar.

Dış bağlantılar

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

Komut kümesi mimarisi, CPU'nun yazılım tarafından nasıl kontrol edileceğini tanımlayan bilgisayar soyut modelinin bir parçasıdır. ISA, işlemcinin ne yapabileceğini ve bunu nasıl yapacağını belirterek donanım ve yazılım arasında bir arayüz gibi davranır.

<span class="mw-page-title-main">C++</span> bir programlama dili

C++, Bjarne Stroustrup tarafından 1979 yılında Bell Laboratuvarları'nda geliştirilmeye başlanmış, C'yi kapsayan ve çok paradigmalı, yaygın olarak kullanılan, genel amaçlı bir programlama dilidir.

<span class="mw-page-title-main">Java</span> açık kaynak kodlu, nesneye yönelik, zeminden bağımsız, yüksek verimli, çok işlevli, yüksek seviye, adım adım işletilen bir programlama dili

Java, Sun Microsystems mühendislerinden James Gosling tarafından geliştirilmeye başlanmış açık kaynak kodlu, nesneye yönelik, platform bağımsız, yüksek verimli, çok işlevli, yüksek seviye, hem yorumlanan hem de derlenen bir dildir.

<span class="mw-page-title-main">Çoklu kalıtım</span>

Çoklu kalıtım bir sınıfın iki veya daha fazla üst sınıftan miras almasını sağlar.Pratikte karışıklıklara sebep olabildiği için C++ içinde kullanılabilen bu yapı C# içinde kaldırılmış ve yerine arayüz (interface) mantığı getirilmiştir.

Olasılık kuramı ve istatistik bilim dallarında varyans bir rassal değişken, bir olasılık dağılımı veya örneklem için istatistiksel yayılımın, mümkün bütün değerlerin beklenen değer veya ortalamadan uzaklıklarının karelerinin ortalaması şeklinde bulunan bir ölçüdür. Ortalama bir dağılımın merkezsel konum noktasını bulmaya çalışırken, varyans değerlerin ne ölçekte veya ne derecede yaygın olduklarını tanımlamayı hedef alır. Varyans için ölçülme birimi orijinal değişkenin biriminin karesidir. Varyansın karekökü standart sapma olarak adlandırılır; bunun ölçme birimi orijinal değişkenle aynı birimde olur ve bu nedenle daha kolayca yorumlanabilir.

Eğitimsel ölçme, genel anlamda ölçme, bir olguya anlamlı sayı ya da semboller atama işlemidir. Eğitsel ölçme ise bu olguların öğrenme ürün ya da sürecine göre kazanımları kapsar. Eğitimsel ölçmelerin amacı ölçülmesi amaçlanan öğrenme yapılarının görgül kestirimlerini sağlamaktır. Bu amaca yönelik olarak değişik ölçme modelleri geliştirilmiştir.

Arabellek aşımı ya da arabellek taşkını, iki yazılım arasında veri iletişimi için ayrılmış olan bir arabelleğe boyutundan daha fazla veri konulması ile ortaya çıkan durumdur.

Sanal bellek, fiziksel belleğin görünürdeki miktarını arttırarak uygulama programına (izlence) fiziksel belleğin boyutundan bağımsız ve sürekli bellek alanı sağlayan bilgisayar tekniğidir. Ana belleğin, diskin (ikincil saklama) önbelleği (cache) gibi davranmasıyla; yani disk yüzeyini belleğin bir uzantısıymış gibi kullanmasıyla gerçekleştirilir. Ancak gerçekte, yalnızca o anda ihtiyaç duyulan veri tekerden ana belleğe aktarılıyor olabilir. Günümüzde genel amaçlı bilgisayarların işletim sistemleri çoklu ortam uygulamaları, kelime işlemcileri, tablolama uygulamaları gibi sıradan uygulamalar için sanal bellek yöntemi kullanılmaktadır.

Sayfalama ya da bellek adresleme, durgun sanal bellek sayfalarının ikincil bellekte (teker) saklanarak daha sonra ihtiyaç duyulduğunda ana belleğe yüklenmesi işlemini içerir. Bir diğer anlamı, adres uzayının belli oranlarda bloklara ayrılmasıdır. Sayfalama, bellek mahallerine ulaşımı ve adreslemeyi kolaylaştırır. 6502 mikroişlemcili bir sistemde 65536'lık adres uzayı 256 adet 256 Baytlık hayalı sayfalara ayrılır. Genelde 6502 işlemcili sitemlerde 1. sayfa yığın olarak ayrılırken 0. sayfaya bakış tabloları veya veri blokları yerleştirilir.

Olasılık kuramı ve istatistik bilim dallarında bir rassal değişken X için olasılık yoğunluk fonksiyonu bir reel sayılı sürekli fonksiyonu olup f ile ifade edilir ve şu özellikleri olması gereklidir:

Olasılık kuramı bilim dalında matematiksel beklenti veya beklenen değer veya ortalama birçok defa tekrarlanan ve her tekrarda mümkün tüm olasılıklarını değiştirmeyen rastgele deneyler sonuçlarından beklenen ortalama değeri temsil eder. Bir ayrık rassal değişkennin alabileceği bütün sonuç değerlerin olasılıklarıyla çarpılması ve bu işlemin bütün değerler üzerinden toplanmasıyla elde edilen değerdir. Bir sürekli rassal değişken için rassal değişken ile olasılık yoğunluk fonksiyonunun çarpımının aralığı belirsiz integralidir. Fakat dikkat edilmelidir ki bu değerin genel pratik anlamla rasyonel olarak beklenmesi pek uygun olmayabilir, çünkü matematiksel beklentiin olasılığı çok düşük belki sıfıra çok yakın olabilir ve hatta pratikte matematiksel beklenti bulunmaz. Ağırlıklı ortalama olarak da düşünülebilir ki değerler ağırlık katsayıları verilen olasılık kütle fonksiyonu veya olasılık yoğunluk fonksiyonudur.

C# sözdizimi, kodların nasıl yazılacağını ve yorumlanması gerektiğini tanımlayan kurallar kümesidir. Bu kurallar, C# programlarının derleyici tarafından doğru bir şekilde okunup çalıştırılmasını sağlar. C# sözdizimi, tıpkı diğer programlama dilleri gibi, değişkenlerin tanımlanmasından, döngülerin ve koşullu ifadelerin yazılmasına kadar, programın yapısını ve işleyişini belirleyen temel unsurları içerir.

Döngü açma, programın çalışmasını hızlandıran döngü dönüştürme yöntemlerinden biridir. Bu yöntem yazılan programın kod satır sayısını artırmaktadır. Döngülerdeki dönüşüm manuel olarak programcı tarafından yapılabileceği gibi kodlar derleyiciler tarafından da düzenlenebilmektedir.

<span class="mw-page-title-main">OpenCL</span>

OpenCL,, Apple tarafından 2008 yılında kâr amacı gütmeyen teknoloji şirketleri birliği Khronos Group'a önerilen, kabul gördükten sonra spesifikasyonu pek çok şirketin katkılarıyla hazırlanan heterojen hesaplama platformudur. OpenCL; destekli grafik işlemcileri, genel amaçlı işlemciler ve FPGA ler gibi farklı platformlarda hesaplama yapılmasına olanak sağlar. OpenCL AMD, Intel, NVIDIA ve ARM tarafından desteklenmektedir. Ayrıca OpenCL kullanılarak Sony Playstation cihazlarında kullanılan Cell işlemcilerde de hesaplama yapılabilmektedir.

<span class="mw-page-title-main">OpenMP</span>

OpenMP; Solaris, IBM AIX, HP-UX, GNU/Linux, MAC OS X ve Windows işletim sistemleri üzerinde çoğu işlemci mimarisi üzerinde Fortran, C++, C programlama dillerinde çoklu platform paylaşımlı bellek çoklu işlemeyi destekleyen bir uygulama geliştirme arayüzüdür, yani bir API'dir. OpenMP derleyici yönergelerinin kütüphane rutinlerini ve ortam değişkenlerinin çalışma zamanı davranışını etkileyen bir kümesini içerir.

<span class="mw-page-title-main">Termodinamik durum</span>

Termodinamikte, sistemin termodinamik durumu, durum fonksiyonları olarak bilinen uygun değişken değerleriyle tam olarak tanımlanabilir. Termodinamik değişkenlerinin değerleri bir sistem için bir kere belirlendiğinde, termodinamiğin bütün özelliklerinin değerleri eşsiz bir şekilde belirlenmiş olur. Genellikle, termodinamik durum termodinamik dengenin biri olarak varsayılır. Yani, bu durum bir sistemin sadece belli bir süredeki durumu değil, durum süresiz uzunlukta aynı ve değişmezdir.

Bilgisayar biliminde boş işaretçi, sıfır referansı veya boş gösterici, geçerli bir nesne adresini göstermeyen işaretçi ya da dolaylamaya verilen genel isimdir. Bir başka deyişle, değeri sıfır olan işaretçidir; yani bilgisayarın belleğinde geçerli olan bir adresi işaret etmemektedir. Bilgisayar programlarında, uzunluğu bilinmeyen bir listenin sonu veya bazı eylemlerin gerçekleştirilememesi gibi koşulları göstermek için rutin olarak boş işaretçiler kullanır; boş işaretçilerinin bu kullanımı, sıfırlanabilir tip veya opsiyonel bir veri tipi gibi düşünülebilir.

C programlama dilinde, struct (yapı), bir bellek bloğunda tek bir ad altında fiziksel olarak gruplandırılmış değişkenler listesini tanımlayan ve farklı değişkenlere tek bir işaretçi (pointer) aracılığıyla erişilmesine izin veren bileşik bir veri türüdür. Struct veri tipi, başka veri türlerini içerebilir. Bu nedenle dosya uzunluğu, ad, uzantı... veya diğer karma türdeki kayıtlar gibi karma veri türü kayıtları için kullanılır.

Tanımsız durum, programlamada bir standartın bir durumu tanımlayamacağı durumlara denmektedir.