BİLİŞİM - BİLGİSAYAR - EĞİTİM
  Pointers-2
 

9.7 İşaretçilerle İlgili Diğer Konular: İşaretçinin Belirli Bir Adresi Göstermesi

 

#include <dos.h>

#include <stdio.h>

char far *ekran;

void kaydir_Y(void);

void kaydir_A(void);

void main()

{

   int i, j;

   char c;

   ekran = MK_FP(0xB800, 0);

   clrscr();

   for (i=0; i<25; i++)

       for (j=0; j<80; j++)

           ekran[160*i+2*j] = 65+i;

 

   while (1) {

      c = toupper(getch());

      switch(c) {

          case 'A' :  /* yukari */

                      kaydir_Y();

                      break;

          case 'Z' :  /* asagi */

                      kaydir_A();

                      break;

          case 'Q' : exit(0);

      }

   }

}

void kaydir_Y(void)

{

  int i, j;

  for (i=8; i<=12; i++)

      for (j=30; j<60; j++)

          ekran[160*(i-1) + 2*j] = ekran[160*i + 2*j];

}

void kaydir_A(void)

{

  int i, j;

  for (i=12; i>=8; i--)

      for (j=30; j<60; j++)

          ekran[160*(i+1) + 2*j] = ekran[160*i + 2*j];

}

 

İşlev İşaretçileri

İşaretçinin bir işlevin bulunduğu adresi içermesi durumudur.  Normal işaretçi gibi işlevin adresini içeren değişken tanımı yapılmalıdır.

 

Örneğin;

                int (*fnptr) (int, int)

 

fnptr değişkeni iki tane int parametresi olup bir int değer geri gönderen bir işlevin adresini içerebilir.

(int *fnptr (int, int) : iki int parametresi olup int işaretçi geri gönderir )

 

Örnek 9.7.1: Aynı isim ile farklı iki işlevi çağırma.

 

int kare(int);

int kub(int);

main()

{

  int (*islem)(int);              /* bir int değer alıp geriye int değer gönderen   bir işlevin adresi  */

  int i;

  char c;

  clrscr();

  printf("1 / 2 : kare / küb hesabı : ");

  c = getch();

  printf("nSayıyı gir : ");

  scanf("%d", &i);

  if (c == '1')

     islem = kare;      /* kare işlevinin adresi islem değişkenine kopyalanır */

 else

     islem = kub;

  printf("Sonuç = %dn", islem(i));

  getch();

}

int kare(int s)

{

 return s*s;

}

int kub(int s)

{

 return s*s*s;

}

 

 

 

 

 

 

 

 

Void İşaretçiler

 

İşaretçiler void olarak tanımlanabilir. Bu biçimde tanımlanan işaretçilerin gösterdiği adresteki değere erişmek için veri tipi belirtilmelidir.

 

main()

{

  void *a;

  a = (char*) malloc(10);

  strcpy(a,"12345");

  printf("%sn",  a);

  free(a);

  a = (double*) malloc(sizeof(double));

  *(double*)a = 3.123;                 /* değere erişirken veri tipi belirt */

  printf("%fn", *(double *)a);

  getch();

 
 
  Bugün 139 ziyaretçi (217 klik) www.bilisim-egitim.tr.gg  
 
Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol