Temel Yönleriyle Fortran 90 / 95 / 2003

  Temel Konular
* Önsöz

* Fortran'a Giriş
* Fortran'nın Temelleri
* Basit ve Formatlı Okuma/Yazma
* Temel Kütüphane Fonksiyonları
* Karşılaştırma Deyimleri
* Döngüler
* Alt Programlar I
* Alt Programlar II
* Diziler
* Dinamik Diziler
* Gösterici (Pointer) Kavramı
* Katarlar (Stringler)
* Yapısal Veri Tipleri
* Dosya Yönetimi
* Modül Kavramı
* Sayısal Tipler (KINDs)
* Bit Düzeyinde Çalışmak
* Kütüphane Fonksiyonları Listesi

* Yararlanılan Kaynaklar

  İleri Uygulamalar
* - - -
* Karmaşık Sayılar
* Tarih-Saat Fonksiyonları
* Rastgele Sayılar
* Katar - Sayı Dönüşümleri
* Komut Satırı İşlemleri
* Co-Array Fortran
* Derleme Seçenekleri
* Fortran ve C

  Seçilmiş Örnekler
* Sayılar Kuramı
* Analiz
* Lineer Cebir

  Fortran 90/95 Derleyicileri
* Salford (silversoft FTN95)
* G95
* GFORTRAN

  Dış Bağlantılar
* programlama.com
* Fortran (wikipedia)

* fortran.gantep.edu.tr
* g95.org
* Hot scripts

  İletişim
* E-posta

 

Bölüm 11: Gösterici (Pointer) Kavramı

############-------- (%60)


Giriş

Hemen hemen bütün programlama dillerinin temelinde gösterici (pointer) veri tipi bulunmaktadır. Bir çok dil gösterici kullanımını kullanıcıya sunmamıştır veya çok sınırlı olarak sunmuştur. Gösterici, bellek alanındaki bir gözün adresinin saklandığı değişkendir. Özellikle C programlama dilinde yoğun olarak kullanılan bu veri tipi, Fortran 90 ile birlikte kullanıcıların hizmetine sunulmuştur.

Türkçe yazılan C kitaplarda pointer kelimesi yerine aşağıdaki ifadelerden biri karşılaşılabilir:

pointer = işaretçi = gösterici = gösterge

Anlatımda, gösterici terimini kullanacağız.


11.1   Değişken ve Bellek Adresi

Bilgisayarın ana belleği (RAM) sıralı kaydetme gözlerinden oluşmuştur. Her göze bir adres atanmıştır. Bu adreslerin değerleri 0 ila belleğin sahip olduğu üst değere bağlı olarak değişebilir. Örneğin 64 MB bir bellek, 64*1024*1024 = 67108864 adet gözden oluşur. Fortran'da bir değişkenin ve değişken tipinin bellekte işgal ettiği alanın bayt cinsinden uzunluğu SIZEOF() fonksiyonu ile öğrenilebilir. (Bkz. Bölüm xx).

Bir programlama dillinde, belli bir tipte değişken tanımlanıp ve bir değer atandığında, o değişkene dört temel özellik eşlik eder:

  1. değişkenin adı
  2. değişkenin tipi
  3. değişkenin sahip olduğu değer (içerik)
  4. değişkenin bellekteki adresi

Örneğin Tam adlı bir tamsayı değişkenini aşağıdaki gibi tanımladığımızı varsayalım:

      INTEGER :: Tam = 33

Bu değişken için, INTEGER tipinde bellekte (32 bit makinalarda herbiri 1 bayt olan 4 bayt büyüklüğünde) bir hücre ayrılır ve o hücreye 33 sayısı ikilik (binary) sayı sitemindeki karşılığı olan 4 baytlık (32 bitlik):

00000000 00000000 00000000 00100001

sayısı elektronik olarak yazılır. Tam değişkenine ait dört temel özellik Şekil 11.1'deki gibi gösterilebilir:



Şekil 11.1: Bir değişkene eşlik eden dört temel özellik

Bellek adresleri genellikle onaltılık (hexadecimal) sayı sisteminde ifade edilir. Z'3fffd14' sayısı onluk (decimal) sayı sisteminde 67108116 sayına karşık gelir. Bunun anlamı, Tam değişkeni, program çalıştığı sürece, bellekte 67108116. - 67108120. numaralı gözler arasındaki 4 baytlık hücreyi işgal edecek olmasıdır. Şekil 11.1'deki gösterim, basit ama anlaşılır bir tasvirdir. Gerçekte, INTEGER tipindeki Tam değişkeninin bellekteki yerleşimi ve içeriği (değeri) Şekil 11.2'de gösterildiği gibi olacaktır.



Şekil 11.2: Tam adlı değişkenin bellekteki gerçek konumu ve ikilik düzendeki içeriği


11.2   Gösterici Nedir?

Gösterici, bellek alanındaki bir gözün adresinin saklandığı değişkendir. Göstericilere veriler (yani değişkenlerin içeriği) değil de, o verilerin bellekte saklı olduğu hücrenin başlangıç adresleri atanır. Kısaca gösterici adres tutan bir değişkendir.

Fortran'da, gösterici tipindeki bir değişken POINTER özelliği ile belirtilir. Gösterici tipinde tanımlanan bir değişken TARGET özelliği taşıyan bir değişkeni gösterebilir. Program 11.1'deki gibi bir kullanımda, PTam göstericisi Tam değişkeninin saklandığı adresi tutacaktır.

Program 11.1: Gösterici Örneği
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
PROGRAM Gosterici_Ornegi
!--------------------------------------------------------
! 11prg01.f95
! Gösterici Örneği
!--------------------------------------------------------
 INTEGER, TARGET  :: Tam = 33
 INTEGER, POINTER :: PTam

  PTam => Tam ! PTam Tam'ı göstriyor

  PRINT *,"PTam Tam  : " ,PTam, Tam

  PTam = 66   ! Tam = 66 anlamında

  PRINT *,"PTam Tam  : " ,PTam, Tam

END PROGRAM 

ÇIKTI

 PTam Tam  :  33 33
 PTam Tam  :  66 66

Bu örnekten anlaşılacağı gibi, PTam ve Tam aynı bellek bölgesini işaret etmektededir. Çünkü, birinin içeriğindeki değişim diğerine yansımıştır.

11.3   ASSOCIATED ve NULLIFY Fonksiyonları

Bir göstericinin bir değişkeni gösterip göstemediği ASSOCIATED() fonksiyonu ile sorgulanabilir. Ayrıca, göstericinin gösterdiği yer NULLIFY() fonksiyonu ile sonlandırılabilir. Program 11.2' bu iki fonksiyonun kullanımı gösterilmiştir.

Program 11.2: ASSOCIATED ve NULLIFY kullanımı
01: 
02: 
03: 
04: 
05: 
06: 
07: 
08: 
09: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
PROGRAM Gosterici_Ornegi
!--------------------------------------------------------
! 11prg01.f95
! ASSOCIATED ve NULLIFY fonksiyonları
!--------------------------------------------------------
 INTEGER, TARGET  :: T1 = 33, T2 = 44
 INTEGER, POINTER :: P

  P => T1 ! P T1'i gösteriyor

  IF(ASSOCIATED(P)) THEN
    PRINT *,"[1]  P T1 T2  : " ,P, T1, T2
  ELSE
    PRINT *,"[1]  P'in bir hedefi yok."
  END IF

  NULLIFY(P) ! P'i boşalt

  IF(ASSOCIATED(P)) THEN
    PRINT *,"[2]  P T1 T2 : " ,P, T1, T2
  ELSE
    PRINT *,"[2]  P'nin bir hedefi yok."
  END IF

  P => T2 ! P şimdi T2'i gösteriyor (hedef değişti)

  IF(ASSOCIATED(P)) THEN
    PRINT *,"[3]  P T1 T2  : " ,P, T1, T2
  ELSE
    PRINT *,"[3]  P'in bir hedefi yok."
  END IF

END PROGRAM 

ÇIKTI

 [1]  P T1 T2  :  33 33 44
 [2]  P'nin bir hedefi yok.
 [3]  P T1 T2  :  44 33 44



Powered by PHP