• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 8/2/2020 11:38:31 PM'Basit' Yazılım Dili
  • 6/25/2020 3:18:13 PMderleme hatası
  • 12/11/2017 4:49:15 PMWindows Hizmeti Hk.
  • 4/23/2016 12:55:33 AMC programlama 2 oyun

Popüler Sorular

  • 5/27/2012 5:49:50 AMAsp.Net ile Date time alana veri ekleyemiiyorum ?
  • 4/2/2012 12:45:18 AM.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 5/12/2012 8:44:49 AMAcil Yardım
  • 5/27/2012 1:46:51 PMveri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LibreOffice
  • LINQ
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

YAPILAR (Structures ) ve YAPI ELEMANLARINA ERİŞİM

Bu yazımızda ise Yapılar(Structures) ve Yapıları Fonksiyonlarla kullanmak adlı makalemizi C programlama dili ile ele alacağız.

20.11.2012

Yazar: Muhammed ÖNAL (Google+)

Kategori: C++

5526

YAPILAR ve YAPI ELEMANLARINA ERİŞİM

Merhaba değerli arkadaşlar,

Bu yazımızda ise Yapılar(Structures) ve Yapıları Fonksiyonlarla kullanmak adlı makalemizi C programlama dili ile ele alacağız.

Yapılar en kaba tabiriyle; Birçok farklı değeri, farklı değişkenler içinde aynı isim altında depolamanın bir metodudur. Yapıları kullanmak, yapılabilecek değişiklikler ve güncellemeleri daha modüler program haline getirir. Çünkü Tasarım gibi şeyleri daha kompakt hale getirir. Yapıları veya Veri yapılarını Class’lara yani Sınıflara benzetebiliriz. Çünkü Yapılar, birbirleriyle ilişkili değişkenleri yukarda da belirttiğimiz gibi aynı isim altında depolar. Yapıları, Dizilerden ayıran en güzel özellik ise; Biz dizileri aynı veri tipinde (data type) elemanlar içerebileceğini biliyoruz. Ama Yapılar, değişik veri tiplerinde elemanlarda içerebilir.

Yazılımcı arkadaşlar çok iyi bileceklerdir ki, Yapıların (Structures)kullanıldığı en önemli yerlerden biri dosya içinde tutulacak kayıtları oluşturur.

Yapılar, farklı tipte nesneler kullanılarak oluşturulan, türetilmiş veri tipleridir. (data types)

Örnek olarak şu veri tanımını vererek örnek üzerinde açıklamaya çalışalım. En çok kullanılan uygulamalardan “Kart Karma” uygulamasından küçük bir örnek vererek başlayalım:

 

struct kart{

       char *taraf;

             char *takim;

};

 

 

Struct Anahtar kelimesi söz konusu Yapı’yı başlatan bir anahtar kelimedir. Kart tanıtıcısı yapı etiketidir .Bu etiketler, yapı tanımına isim verir ve struct anahtar kelimesiyle birlikte kullanılarak yapı tipinde değişkenler (variables) bildirirler.

Her yapı tanımı noktalı virgül ile sonlandırılmalıdır. Noktalı virgülü unutmak, Genel bir programlama hatasına sebebiyet verir.

NOT:
--------------------------------------------------------------------------------------------------------------------------------------

farklı iki yapı aynı isimde elemanlar içerebilirler. Aynı isimde elemanlar içeren farklı yapılar herhangi bir karışıklığa sebebiyet vermez.

--------------------------------------------------------------------------------------------------------------------------------------

Struct kart tanımı, char * tipinde iki eleman (taraf ve takim) içermektedir.

 

 

 

Yapı değişkenleri diğer tiplerdeki gibi bildirilirler. Örneğin;

struct kart a, deste[52], *cPtr;


Bildirimi, struct kart tipinde bir a değişkeni, struct kart tipinde 52 elemana sahip bir deste dizisi ve struct kart’ı gösteren bir gösterici değişkeni bildirir.

Yukarıda verdiğimiz örneği şu şekilde de verip birleştirebiliriz:

 

struct kart{

       char *taraf;

             char *takim;

}a, deste[52], *cPtr;

 

 

 

Yukarıda bahsettiğimiz yapı etiketi tamamen isteğe bağlı olarak kullanılır. Yapı etiketi ismi içermeyen bir yapı tanımlamasında ayrı bir bildirim ile bildirilemezler. Ama iyi bir programlama açısından Yapı etiket isminin kullanılması iyi bir alışkanlıktır. Bunun sebebi, yapı etiket ismi programda daha sonradan o yapı tipinde yeni değişkenler tanımlamak için gerekli olan yapılardır. Bu da programın anlaşılır hale gelmesinde en önemli ölçüttür.

NOT:

Yapı elemanları hafızada ardışık byte şeklinde bulunmak zorunda değillerdir. Bazen yapılar içinde boşluklar bulunabilir çünkü bilgisayarlar belli veri tiplerini bilgisayarda tutmak için kullanılan standart hafıza birimleri olarak nitelendirilen özel sınırlar içinde depolanırlar.

 

Bu standart hafıza birimleri;

 

                              -->  1 (halfword)

                              -->  2 (word)

                              -->  4 (double word)

Uzunluğunda olabilen birimlerdir.

 

 

 

Yapılara ilk değer atamasının yapılması:

Yapılara ilk değeri atamak, tıpkı dizilerde olduğu gibi atama listeleri ile yapılır. Aşağıdaki örnek gibi bir yapıya değer atayabiliriz:

struct kart x = {"Üç", "Sinek"};

 

şeklinde bir bildirim yazarsak, bu bildirim şunu ifade etmektedir. Yukarıda giriş bölümünde Kart karma uygulamasında yapılara ait örneğimizde şöyle bir yapı kullanmıştık,

 

 

 

 

 

struct kart{

       char *taraf;

             char *takim;

};

 

İşte bu kullanımda paralel olarak, yazdığımız ilk değer atamasını açıklayacak olursak;

 

struct kart x = {"Üç", "Sinek"};


Bildirimimizde ki, daha önceden tanımladığımız struct kart tipinde bir x değişkeni oluşturdu. Bu değişkenin  char *taraf;  elemanına  “Üç” ve  char *takim; elemanına “Sinek” değeri atanmıştır.

NOT:


Atama listesinde yapı elemanlarından daha az sayıda atama değeri mevcut ise, kalan elemanlar otomatik olarak Sıfır (0) değerine atanır.  Ya da eleman bir pointer ise NULL değerine atanır.

 

 

Yapı elemanlarına ilk değer atamasını yaptıktan sonra atama yaptığımız yapı elemanlarına nasıl ulaşacağımızı gösterecek olursak;

Yapı elemanlarına ulaşım noktasında iki operatör kullanımı gerekmektedir. Bu operatörler;

            -->  Yapı elemanı yada nokta operatörü (.)
            -->   Yapı gösterici yada ok operatörü (-> )

Şeklindedir. Bunlardan yapı elemanı operatörü yada nokta operatörü, ulaşmak istediği yapı elemanına yapı değişkeninin ismini kullanarak ulaşır.

Yukarıdaki örnek üzerinde gösterecek olursak, x yapısının takim elemanını yazdırmak için printf metodunu kullanırız.

            printf ("%s",x.takim);

 

Yapı Gösterici operatörü ise;  yapıyı gösteren bir pointer ile erişimi sağlar.

            printf("%s",xPtr -> takim);

 

şeklinde bir ifade kullanılır.

Buradaki;  xPtr -> takim  ifadesi  (*xPtr).takim ifadesi ile aynı anlamı ifade etmektedir.

NOT:

Parantezler kesinlikle kullanılmalıdır. Sebebi ise, yapı elemanı operatörü yada nokta operatörü, pointer operatöründen daha yüksek önceliğe sahip bir elamandır.

 

 

NOT:

Genel Programlama hatalarına maruz kalmamak için, kullanımları sırasında -> ve . operatörlerinden önce veya sonra boşluk bırakmayınız. Bitişik yazınız. Bu şekilde kullanımları tek bir değişken olduklarını ifade eder.

 

NOT:

Genel anlamda yazılım geliştiricilerinin yaptığı diğer bir genel programlama hatasından biri ise; Yapı elemanının adını tek başına kullanarak yapı elemanına erişmeye çalışmak, bizleri bir hatayla baş başa bırakır.

 

 

Aşağıdaki Program:

Yapı elemanı operatörü yada nokta operatörü dediğimiz operatör ile pointer operatörünün kullanımına dair piyasada en çok kullanılan kart karma Örneğinin bir kısmını gösteren bir programı göstermektedir.

#include <stdio.h>

 

struct kart{

 

       char *taraf;

       char *takim;

}

 

int main()

{

       struct kart x;

       struct kart *xPtr;

 

       x.taraf = "As";

       x.takim = "Maça";

       xPtr = &x;

       printf("%s%s%s\n%s%s%s\n%s%s%s\n",x.takim,x.taraf,"ı",

               xPtr->takim ,xPtr->taraf ,"ı",(*xPtr).takim,(*xPtr).taraf,"ı");

 

       return 0;

}

 

 

Ekran Çıktısı:

Maça Ası

Maça Ası

Maça Ası

 

Bir sonraki yazımızda ise Yapıların Fonksiyonlarla birlikte kullanımına değinerek, Kart Dağıtma ve Karma Programını sizlerle irdelemiş olacağız.

 

 

Bugünlükte bizden bu kadar diyor ve makalemizin sonuna gelmiş bulunuyoruz. Kafanıza takılan soru işaretleri var ise mail yoluyla sorularınızı iletebilirsiniz. BOL GÜVENLİ YAZILIMLI HAYAT DİLİYORUM J

Yazılım ve Programlama aşkı ile tutuştuğumuz bir sonraki yazımızda görüşmek dileğiyle.

Saygılarımla;

Muhammed ÖNAL
Bilgisayar Mühendisi
RFID Sistemleri Uzmanı
BT Yönetişimcisi

Blog:  http://www.muhammedonal.com
Web : http://www.yazilimdilleri.net


Copyright © Muhammed ÖNAL , 2012

 

 

Yazar Hakkında

Muhammed ÖNAL

Muhammed ÖNAL

www.muhammedonal.com

Bilgisayar Mühendisi | RFID Sistemleri Uzmanı | BT Yönetişimcisi | Strateji Planlama ve İş Geliştirme 2015 itibariyle sağlık sektöründe Bilgi Sistemleri Yöneticisi ve Üst yönetim Stratejik Planlama ve İş Geliştirme Koordinatörü pozisyonunda çalışmaktadır.

Sosyal Medya

ORANLAR

  • 5526izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 124113
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 71306
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 51908
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ