Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Tanıl Ergin
Tanıl Ergin
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
21 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C / Sys Prog. Tanıl Ergin
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C / Sys Prog.
Yayınlanma Tarihi : 30.7.2003
Okunma Sayısı : 91976
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 23.11.2024
Turhal Temizer
Mac OS/X Removing CUDA 23.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 23.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 23.11.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
C Dilindeki Veri Yapılarına Giriş (STRUCT, UNION, ENUM)
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Bu makalede C dilinde, structure, union, enum, coercion vs. gibi  veri yapıları kavramlarının nasıl yaratıldığını ve kullanıldığını sizlere anlatacağım.

Yapılar(Structures)

Yapılar Pascal’daki record’lara benzer.

Örneğin;

struct kitap { char ad[50]; int sayfa; int basimsayi; }; struct kitap ornek1;
Kod parçası kitap adlı bir yapı yaratır ve bu yapının ornek1 adında bir orneğini oluşturur.

Burada ornek1, } ile ; arasına yazılarak da tanımlanabilirdi:

Struct kitap { char ad[50]; int sayfa; int basimsayi; } ornek1;
Yapılara tanımlanırken de değer atanabilir. Örneğin :

struct kitap ornek1={"C Programlama",300,7};

Bu satır ornek1’in C Programlama adında, 300 sayfalık ve 7. Basımını yapmış bir kitabı temsil ettiğini gösterir.

Yapının bir elemanına ulaşmak istendiğinde "." kullanılır. Örneğin ornek1’in basım sayısının değerini atamak için;

Ornek1.basimsayi=7;
gibi bir erişim kullanabilirsiniz.

Yeni Veri Tipleri Yaratmak

Typedef komutu da yapılarla birlikte kullanılabilir.

Örneğin;

typedef struct kitap { char ad[50]; int sayfa; int basimsayi; } ornek1; kitap ornek1={"C Programlama",300,7};
kodu, kitap adında yeni bir yapı oluşturup ornek1 adında bir örneğini yaratır.

Typedef kullanılmasının struct’dan farkı, tanımlama esnasında struct’da "struct kitap ornek1;" diye yazarken typedef ile tanımlandığında

"kitap ornek1;" şeklinde bir tanımlama yapabilimeye olanak vermesidir. Bunun sebebi de typedef kullanıldığında, yeni bir yapı değil, yeni bir veri tipi yaratmış olmamızdır. Bu

yüzden nasıl bir tamsayı tanımlıyorsanız, benzer şekilde bir kitap tipinde değişken tanımlayabilmekteyiz.

C ’de ayrıca vektörlü(dizi) yapılara da izin verilir:

typedef struct kitap { char ad[50]; int sayfa; int basimsayi; } ornek1; kitap ornek1[100];
Bu şekilde ornek1, 100 tane kitap değişkenini tutabilir. Bu yapı dizisi şu şekilde kullanılabilir:

ornek1[3].sayfa=100;
 Bu kod ornek1 vektörünün 3 nolu kitap elemanının sayfasının 100 olduğunu belirtir.

Ayrıca:

syf= ornek1[3].sayfa;
3 nolu kitabın sayfa sayısının syf adlı değişkene atanmasını sağlar.

Union Kavramı

Union, yapı (struct) kullanıma benzemekle birlikte, aralarında çok büyük bir fark vardır. O da union ile sadece bir değişken yaratılabilmesidir. Yani union ile yaratılan

bir değşken program boyunca tektir.

Örneğin:

union sayi { short ksayi; long usayi; double vsayi; } ornek1;
kodu sayi adlı bir union oluşturur ve ornek1 adlı bir değişken de sayi tipindedir. ornek1’in elemanlarına yapı’lardaki gibi erişilir:

ornek1.vsayi=2,3;
C derleyicisi union yapılar için bellekte yer ayıracağı zaman, her zaman en geniş elemanın saklanabileceği kadar yer ayırır(yukarıdaki örnekte double için 8 byte)

 Union’ların kullanımını en güzel aşağıdaki örnek açıklamaktadır:

typedef struct { int maxyolcu; } jet; typedef struct { int kapasite; } helikopter; typedef struct { int maxyuk; } kargoucagi; typedef union { jet jetu; helikopter helikopteru; kargoucagi kargoucagiu; } hava; typedef struct { aractipi tip; int hiz; hava aciklama; } arac;
Bu örnekte de görüldüğü gibi, bir aracin sadece bir aractipi olabilir: jet, helikopter, kargoucagi. Buna benzer durumlarda, kullanılması gereken en iyi taktik unionlardır.

Tip Dönüşümleri (Coercion, Type-Casting)

C tip döünüşülerine izin veren birkaç programlama dilinden biridir.

Tip dönüşümü, bir değişkenin tipinin başka bir değişken tipine dönüştürmedir. Bu işlem ( ) operatörü ile yapılır.

Örneğin:

int tamsayi; float ondalikli=9.87; tamsayi=(int)ondalikli;
kodu tamsayi değişkenine 9 (virgülden önceki kısım) değerini atar.

Ayrıca:

int tamsayi =10;

float ondalikli;

ondalikli =(float) tamsayi;

Ondalıklı değişkenine 10.0 değerini atar.

Tip dönüşümü tüm basit veri tipleri için (char dahil) kullanılabilir.

int tamsayi; char harf=’A’; tamsayi =(int)harf;
kodu tamsayi değişkenine 65 (A harfinin ASCII değeri) değerini atar.

Not: Bazı tip dönüşümleri otomatik olarak yapılır.

Başka bir kullanımı ise, istenilen sonucun tipinin zorunluluk taşımasıdır. Örneğin 2 tamsayıyı bölüp bir ondalıklı sayı elde etmek istiyorsanız aşağıdaki kod bunu sağlayacaktır:

Ondalikli = (float) tamsayi1 / (float) tamsayi2;

Statik Değişkenler

Bir statik değişken belirli bir fonkiyona yereldir, bir kez tanımlanır (fonksiyonu ilk çağrıldığı zaman)

Değişkenin değeri fonksiyon sonlandırıldığında sıfırlanmaz. Fonksiyon tekrar çağrıldığında değişken aynı değeri taşımaya devam eder.

Bir değişkeni statik olarak tanımlayabilmek için başına static kelimesi eklememiz gerekir.

#include <stdio.h> void basla(); void main() { int i; for (i=0;i<5;++i) basla(); } void basla() { int degisken = 0; static int st_degisken = 0; printf( "degisken = %d, st_degisken = %d", degisken, st_degisken); ++degisken; ++st_degisken; }
Yukarıdaki programın çıktısı aşağıdaki gibi olacaktır :

Degisken = 0, st_degisken= 0 Degisken = 0, st_degisken = 1 Degisken = 0, st_degisken = 2 Degisken = 0, st_degisken = 3 Degisken = 0, st_degisken = 4
Buradan da anlaşılacağı gibi "degisken" her seferinde tekrar yaratıldığı için hep sıfır değerinndedir. "st_degisken" sadece bir kez yaratıldığından değeri artarak devam eder.

Enumeration(Numaralandırmalar)

Bu kavramın türkçeleştirilmesi anlam karışıklığına yol açtığı için genellikle "enum sabiti"  şekilde kullanılmaktadır.

Bu tipte, değerleri çeşitli sembollerle belirtebiliriz: Örneğin haftanın günlerini sembolize etmek için aşağıdaki gibi bir yapı kullanılabilir.

Enum gunler {pzt, sl, crs, prs, cm, cts, pzr} hafta;

Enum gunler hafta1, haft2;

Başka bir örnek:
Enum ornek { bir = ’a’, iki= ’b’, uc = ’t’, dort = ’n’ };
Makale:
C Dilindeki Veri Yapılarına Giriş (STRUCT, UNION, ENUM) C ve Sistem Programlama Tanıl Ergin
  • Yazılan Yorumlar
  • Yorum Yaz
EKİ
1
2010
Örnek gözükmüyor yenilerseniz sevinirim..
MAR
15
2004
C dili tip güçlü bir dil olduğundan, C programalamada veri tipleri ve yapılar çok önemli bir konu. Temel haliyle veri yapıları hakkındaki makalesi için teşekkür ederim.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor