Programlama Dilleri 1. Ders 5: Göstericiler

Benzer belgeler
8. İŞARETCİLER (POINTERS)

Pointer Kavramı. Veri Yapıları

Struct VE GÖSTERİCİLER FONKSİYONLARDA STRUCT KULLANIMI Programlama dilleri hafta -

Eln 1001 Bilgisayar Programlama I

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

ALGORİTMA VE PROGRAMLAMA II

C++ Dersi: Nesne Tabanlı Programlama

ALGORİTMA VE PROGRAMLAMA II

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

YAPILAR (STRUCTURES)

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

sayi=3 harf=a reelsayi=8.72 Bellek durumu 5. İşaretç iler (pointers)

C Programlama Dilininin Basit Yapıları

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

Sınav tarihi : Süre : 60 dak.

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER

Deney 7: Fonksiyon Tanımlama ve Parametre Aktarım Yöntemleri

Adım Adım C-II. Eksik kalmış konular

2) /* Kullanıcıdan alınan iki sayının obebini alt fonksiyon yardımı ile hesaplayan C programı*/

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

Göstericiler (Pointers)

Adı Soyadı Öğrenci No. Toplam (100p) 2 (10p) +10p. 5 (25p) +10p. 3 (20p) 4 (25p) 1 (20p)

Pointers (İşaretçiler)

Kocaeli Üniversitesi C Bilgisayar Programlama Ara Sınavı Test Soruları

KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

Örneğin iki sayının toplamının hesaplayacak bir fonksiyon şöyle tanımlanabilir:

Giris {\} /\ Suhap SAHIN Onur GÖK

Diziler (Arrays) Çok Boyutlu Diziler

Sınav tarihi : Süre : 60 dak. c) En başta #include<stdio.h> yazılmamıştır. c) zt d) Pi e) X0

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Programlama Dilleri 1. Ders 4: Diziler

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

C PROGRAMLAMA D İ L İ

Hazır Fonksiyonlar {\} /\ Suhap SAHIN Onur GÖK 1

C PROGRAMLAMA D İ L İ

Algoritma ve Programlama: Karar Yapıları ve Döngüler

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

Final Sınavı Soruları Güz, Süre: 90 Dakika

C ile Uygulamalar 2 - Cevaplar

BÖLÜM 11: YAPISAL VERİ TİPLERİ

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

ELN1001 BİLGİSAYAR PROGRAMLAMA I

C Programlama printf() Fonksiyonu

Örnek1: #include <iostream> #include <string> using namespace std;

İşaretciler - Pointer

#include<stdio.h> #include<conio.h> #define doktorsayisi 3. typedef struct dr{ int ay1, ay2, ay3, ay4; } doktor; float hesapla(doktor dktr){

ESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Fonksiyonlar (Altprogram)

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

BLM 111 ALGORİTMA VE PROGRAMLAMA I

Temel Giriş/Çıkış Fonksiyonları

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

Yrd. Doç. Dr. Caner ÖZCAN

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

BÖLÜM 9: POINTERLER (İŞARETÇİLER)

Kocaeli Üniversitesi Bilgisayar Mühendisliği Programlama 2 Dersi Final Sınavı. A Grubu

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

Adı Soyadı : Öğrenci No :

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

BÖLÜM 5: TEMEL GİRİŞ/ÇIKIŞ FONKSİYONLARI

Dr. Fatih AY Tel: fatihay@fatihay.net

C PROGRAMLAMA D İ L İ

8. Bölüm DİZİLER. tip dizi_ismi[eleman_sayısı]; Bütün diziler 0 ile baţlar.

C Programlama Dilinde Değişkenler

DÖNGÜ DEYİMLERİ (while, do while, for)

Telefon Rehberi Uygulaması

DOSYA İŞLEMLERİ Programlama dilleri hafta -

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Fonksiyonlar. Yrd.Doç.Dr.Bülent Çobanoğlu

ALGORİTMA VE PROGRAMLAMA I

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

BİLG Dr. Mustafa T. Babagil 1

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

Dizgiler. C dilinde karakter m şeklinde tek tırnak içerisinde yazılan ifadelerdir. Bu karakterlerin her biri aslında bir tamsayı ile ifade edilir.

Yrd. Doç. Dr. Caner ÖZCAN

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

PROGRAMLAMAYA GİRİŞ DERS 2

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

#include <stdio.h> int main(void) { float sayi; float * p; p = &sayi; printf("deger girin:"); scanf("%f", p); printf("girilen deger:%f\n", *p);

Genel Programlama II

NESNEYE YÖNELİK PROGRAMLAMA

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf

Bölüm 2 - C ile Programlamaya Giriş

Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

Biçem Belirteçleri (Format Specifiers)

Klavyeden girilen metnin karakter uzunluğu bulan C programı. Klavyeden girilen metin içerisindeki küçük ve büyük harf sayısını bulan C programı

int printf (const char *format [, argument,...]);

Yrd. Doç. Dr. Caner ÖZCAN

STRİNG DİZİLER(KATARLAR)

BİL1001 Bilgisayar Bilimlerine Giriş 1

Temel Dosya İşlemleri. Kütük Organizasyonu 1

İŞLEVLER ve İŞLEÇLER. İstanbul Üniversitesi Elektrik Elektronik Mühendisliği. Kaynak: C ve Sistem Programcıları Derneği Kurs notu

Genel Programlama II

Transkript:

Programlama Dilleri 1 Ders 5: Göstericiler

Değişkenlerin adresleri Bellekteki her değişkenin bir adresi ve bir de taşıdığı değeri vardır. int x=3; DEĞİŞKEN BELLEK ADRES 0 (0000) 1 2 3 4...... 65533 (FFFD) x 3 65534 (FFFE) 65535 (FFFF) Programlama Dilleri 1 2

Değişkenlerin adresleri char ch; int b; sizeof(ch) veya sizeof(char) sizeof(b) veya sizeof(int) Programlama Dilleri 1 3

Değişkenlerin adresleri Adres, o değişkenin bellekteki konumunu gösteren bilgidir. Bir değişkenin bellek üzerindeki adresini öğrenmek için "&" operatöründen yararlanılır. & adres operatörü, önünde bulunan değişkenin adresini bildirir. Programlama Dilleri 1 4

Göstericiler * içerik operatörü de önündeki değişkenin bir gösterici (pointer) olduğunu bildirir. tip * değişken_adı; int *p; Bu ifade, tam sayı türündeki bir p göstericisini tanımlamaktadır. char *cptr1,*cptr2; float *naber; Programlama Dilleri 1 5

Göstericiler Bildirimi yapılmış bir gösterici, herhangi bir şey ifade etmez. Bu göstericinin kullanılabilmesi için, söz konusu göstericiye bir başka değişkenin adresini yerleştirmek gerekmektedir. Programlama Dilleri 1 6

Göstericiler int *p; int y; p=&y; p bir göstericidir ve kendisine ancak bir tamsayının adresi atanabilir. char *cptr1; float abc; cptr1 = &abc; //HATA!!! Programlama Dilleri 1 7

Göstericiler Adres bilgilerinin görüntülenmesi için printf( ) deyimi içinde biçimlendirme ifadesi olarak %p kullanmak gerekmektedir. Adresin onaltılık (hexadecimal) düzende görüntülenmesi isteniliyorsa %x tanımı kullanılır. Programlama Dilleri 1 8

Örnek-1 #include<stdio.h> #include<conio.h> int main( ) { int x=200; printf("değişkenin değeri:%d\n",x); printf("değişkenin bellek adresi:%p\n",&x); getch(); return 0; } Programlama Dilleri 1 9

Örnek-2 #include<stdio.h> #include<conio.h> int main( ) { int a,b; double c; char d; printf("a degiskeninin adresi:%p\n",&a); printf("b degiskeninin adresi:%p\n",&b); printf("c degiskeninin adresi:%p\n",&c); printf("d degiskeninin adresi:%p\n",&d); getch(); return 0; } Programlama Dilleri 1 10

Null ve Void Göstericiler Bir göstericinin bellekte herhangi bir adresi göstermemesi veya önceden göstermiş olduğu adresin iptal edilmesi istenirse NULL sabiti kullanılır. int *ptr=null; void göstericiler yalnızca adres saklamak için kullanılır. void *adr; İşaret ve Sistemler 11

Adreslerle işlemler Bir adres bilgisini artırarak ya da azaltarak, önceki veya sonraki adreslere ulaşabiliriz. a tamsayı değişkeninin adresi &a: 0026FCC8 &a+1 : 0026FCCC &a-1 : 0026FCC4 a char değişkeninin adresi &a: 0026FCC8 &a+1 : 0026FCC9 &a-1 : 0026FCC7 Yanlış kullanımlar: &a++, &++a, ++&a Programlama Dilleri 1 12

Gösterici aritmetiği Bir göstericinin içerdiği adresin bir sonrasını ya da bir öncesini öğrenmek için, göstericinin artırılması ya da eksiltilmesi yeterlidir. ++*p; *++p; *p++; Programlama Dilleri 1 13

Örnek-3 #include<stdio.h> #include<conio.h> int main( ) { double z=3.3; double *p=&z; printf("degeri=%4.1f, adresi :%p\n",*p,p); p++; printf("degeri=%4.1f, adresi:%p\n",*p,p); p++; printf("degeri=%4.1f, adresi:%p\n",*p,p); getch(); return 0; } Programlama Dilleri 1 14

& ve * operatörleri Gösterici işlemlerinde * ve & operatörlerini birlikte kullanmak mümkündür. Ancak bu operatörler birbirinin tersi işlemleri yerine getirdiği için, birbirlerini götürmeleri söz konusudur. Programlama Dilleri 1 15

Dizilerle göstericilerin birlikte kullanımı Bir a[ ] dizisinin temel adresi &a[0] biçiminde elde edilir. a[ ] dizisinin temel adresini bulmak için sadece a yazmak da yeterlidir. Bir dizi indissiz olarak yazıldığında, bu söz konusu dizinin temel adresini verecektir. Programlama Dilleri 1 16

Örnek-4 #include<stdio.h> #include<conio.h> #define boyut 5 int main( ) { int a[boyut]={2,7,0,3,9}; int *gosterici=a; for(int i=0;i<boyut;i++) printf("%d\n",*(gosterici+i)); getch(); return 0; } Programlama Dilleri 1 17

Örnek-5 #include<stdio.h> #include<conio.h> #define boyut 5 int main( ) { int a[boyut]={2,7,0,3,9}; int *gosterici=a; for(int i=0;i<boyut;i++) printf("%d\n",*gosterici++); getch(); return 0; } Programlama Dilleri 1 18

Örnek-6 #include<stdio.h> #include<conio.h> int main( ) { char a[ ]="Bilecik Seyh Edebali Universitesi"; char *gosterici=a; for(int i=0;gosterici[i]!= \0 ;i++) printf("%c",gosterici[i]); getch(); return 0; } Programlama Dilleri 1 19

Fonksiyon parametre değişkeni olarak göstericilerin kullanılması fonk_tipi fonk_adı(değişken_tipi * değişken_adı) {... } Bir fonksiyonun parametre değişkeni bir gösterici ise fonksiyon da aynı türden bir adres bilgisi ile çağırılmalıdır. Programlama Dilleri 1 20

Örnek-7 Örnek-8 #include<stdio.h> #include<conio.h> void fonksiyon(int *p) { *p = 20; } int main( ) { int a = 10; fonksiyon(&a); printf("%d\n", a); getch(); return 0; } #include<stdio.h> #include<conio.h> void degistir(int *p1, int *p2) { int gecici = *p1; *p1 = *p2; *p2 = gecici; } int main( ) { int a=10, b=20; degistir(&a, &b); printf(" a = %d\n b = %d\n",a,b); getch(); return 0; } Programlama Dilleri 1 21

Fonksiyon parametre değişkeni olarak göstericilerin kullanılması Fonksiyon göstericisi, fonksiyon adının saklandığı bellek adresini tutan bir göstericidir. Fonksiyon göstericileri sayesinde fonksiyonlar, başka fonksiyonlara parametre olarak aktarılabilmektedir. Fonksiyon bildirimi int fonk(int a) {.} Fonksiyon göstericisi bildirimi int* pfonk (int paramatre); İşaret ve Sistemler 22

Örnek-9 #include<stdio.h> #include<conio.h> int* fonk(int n){ int f=1; for(int i=1; i<n; i++) f*=i; return &f; } int main(){ int a=5; int *ptr=fonk(5); printf("degeri = %d\n", *ptr); printf("fonksiyonun adresi = %p\n", fonk(5)); getch(); return 0; } İşaret ve Sistemler 23

Köşeli Ayraç İşleci [ ] [ ] İşleci göstericilerde içerik gösterme anlamına gelmektedir. int a=9, *ptr=&a; ptr[0] = 11; // *ptr =11 ile aynıdır Dizilerdeki kullanım aslında bir gösterici kullanımıdır. char dizi[ ] = "Bilecik"; char *cptr = &dizi[3]; //cptr içeriği ne oldu? *cptr = dizi+3; printf("%c", cptr[0]); // *cptr Ekrana e basar printf("%c", cptr[-2]); // *(cptr-2) Ekrana i basar printf("%c", cptr[1]-2); // *(cptr+1)-2 Ekrana a basar printf("%c", *(cptr+1)+1); // cptr[1]+1 Ekrana d basar İşaret ve Sistemler 24