<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>C Programlama Dili</title>
	<atom:link href="http://c.hepsiproje.org/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://c.hepsiproje.org</link>
	<description>C Programlama C Derleyicisi Mikroişlemci Embedded Systems</description>
	<pubDate>Mon, 02 Mar 2009 12:35:40 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>POINTER VE ARİTMETİK</title>
		<link>http://c.hepsiproje.org/?p=5</link>
		<comments>http://c.hepsiproje.org/?p=5#comments</comments>
		<pubDate>Mon, 19 May 2008 16:31:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[pointer]]></category>

		<category><![CDATA[c programlama dili]]></category>

		<category><![CDATA[POINTER VE ARİTMETİK]]></category>

		<guid isPermaLink="false">http://c.hepsiproje.org/?p=5</guid>
		<description><![CDATA[POINTER VE ARİTMETİK
Her cesit islemler, pointer&#8217;lar ile mumkun degildir. Pointer bir adres oldugundan, ona bir sabit rakam ekleyip, daha ilerideki bir adrese erismek mumkundur. Ayni sekilde, pointer&#8217;in adresinde bir rakam cikartip, daha onceki hafiza bolgelerine erismek mumkundur. Iki pointer&#8217;i toplamak pek mantikli degildir, cunku bilgisayardaki adresler sabit degildir. Cikacak rakamin tuhaf olacagi icin pointer ile [...]]]></description>
			<content:encoded><![CDATA[<p><strong>POINTER VE ARİTMETİK</strong></p>
<p>Her cesit islemler, pointer&#8217;lar ile mumkun degildir. Pointer bir adres oldugundan, ona bir sabit rakam ekleyip, daha ilerideki bir adrese erismek mumkundur. Ayni sekilde, pointer&#8217;in adresinde bir rakam cikartip, daha onceki hafiza bolgelerine erismek mumkundur. Iki pointer&#8217;i toplamak pek mantikli degildir, cunku bilgisayardaki adresler sabit degildir. Cikacak rakamin tuhaf olacagi icin pointer ile carpma da yapilamaz. Ne yaptiginizi dusunurseniz, yapabilecekleriniz ve yapamayacaklariniz kendini belli edecektir.<br />
<strong>TAMSAYI POINTER</strong></p>
<p>&#8220;list&#8221; isimli tamsayi dizisine, 100 den 199 a kadar degerler verilir. Daha sonra, 28. elemanin adresini, &#8220;pt&#8221; isimli pointer&#8217;a atiyoruz. Daha sonra ekrana yazdigimizda, gercektende, o degeri aldigini goruyoruz.</p>
<p>Daha onceki konularda, bir fonksiyondan veri degerlerini dondurmek icin iki metod oldugunu soylemistim. Ilki, bir dizi kullanarakti. Ikincisini herhalde tahmin edersiniz. Sayet tahmininiz &#8220;pointer sayesinde&#8221; idiyse,tebrikler.</p>
<p>Burada, iki tane tamsayi degiskeni (pointer degil) tanimliyoruz: &#8220;cevizler&#8221; ve &#8220;elmalar&#8221;. Once bunlara birer deger atiyoruz, ve &#8220;degistir&#8221; isimli fonksiyonu cagiriyoruz. Cagirirken, &#8220;cevizler&#8221; in degeri (100), ve &#8220;elmalar&#8221; degiskeninin adresini geciriyoruz. Fakat, fonksiyona da, bir deger ve bir adres gelecegini haber vermemiz gereklidir. Bunun icin, fonksiyonun parametreleri tanimlanirken, bir adres tasiyacak olan sembolun basina bir yildiz koymamiz yeterlidir.</p>
<p>Fonksiyonun icinde, bu iki degeri degistirip, eski ve yeni degerleri ekrana yaziyoruz. Bu program calistiginda, ana programdaki &#8220;cevizler&#8221; in degerinin ayni kaldigini fakat &#8220;elmalar&#8221; in yeni degerlerini aldigini goreceksiniz.</p>
<blockquote>
<pre>main<span class="operator">(</span><span class="operator">)</span>
<span class="operator">{</span>
<span class="type">int</span> cevizler<span class="operator">,</span>elmalar;

cevizler = 100;
elmalar = 101;
printf<span class="operator">(</span>&#8220;Baslangic degerleri <span class="operator">%</span>d <span class="operator">%</span>d<span class="=operator">\</span>n&#8221;<span class="operator">,</span>cevizler<span class="operator">,</span>elmalar<span class="operator">)</span>;

<span class="operator">/</span><span class="operator">*</span> &#8220;degistir&#8221; i cagirinca<span class="operator">,</span> <span class="operator">*</span><span class="operator">/</span>
degistir<span class="operator">(</span>cevizler<span class="operator">,</span>&amp;elmalar<span class="operator">)</span>; <span class="operator">/</span><span class="operator">*</span> cevizlerin DEGERI ve<span class="operator">,</span> <span class="operator">*</span><span class="operator">/</span>
<span class="operator">/</span><span class="operator">*</span> elmalarin adresini geciriyoruz <span class="operator">*</span><span class="operator">/</span>

printf<span class="operator">(</span>&#8220;Bitis degerleri ise<span class="operator">,</span> <span class="operator">%</span>d <span class="operator">%</span>d dir<span class="operator">.</span><span class="operator">.</span><span class="=operator">\</span>n&#8221;<span class="operator">,</span>cevizler<span class="operator">,</span>elmalar<span class="operator">)</span>;
<span class="operator">}</span>

degistir<span class="operator">(</span>kuru_yemis<span class="operator">,</span>meyvalar<span class="operator">)</span> <span class="operator">/</span><span class="operator">*</span> kuru_yemis tamsayidir <span class="operator">*</span><span class="operator">/</span>
<span class="type">int</span> kuru_yemis<span class="operator">,</span><span class="operator">*</span>meyvalar; <span class="operator">/</span><span class="operator">*</span> meyvalar bir tamsayi pointer&#8217;idir <span class="operator">*</span><span class="operator">/</span>
<span class="operator">{</span>
printf<span class="operator">(</span>&#8220;Degerler <span class="operator">%</span>d <span class="operator">%</span>d<span class="=operator">\</span>n&#8221;<span class="operator">,</span>kuru_yemis<span class="operator">,</span><span class="operator">*</span>meyvalar<span class="operator">)</span>;
kuru_yemis = 135;
<span class="operator">*</span>meyvalar = 172;
printf<span class="operator">(</span>&#8220;Sonraki degerler <span class="operator">%</span>d <span class="operator">%</span>d<span class="=operator">\</span>n&#8221;<span class="operator">,</span>kuru_yemis<span class="operator">,</span><span class="operator">*</span>meyvalar<span class="operator">)</span>;
<span class="operator">}</span></pre>
</blockquote>
<p>&#8220;cevizler&#8221; in degerinin ayni kalmasinin nedeni, fonksiyona bir deger gecirildiginde, C dilinin o degerin bir kopyasini fonksiyona gecirmesi yuzundendir. Programa geri dondugunuzde, degerin bir kopyasini kullandigimiz icin asil degerin degismedigini goreceksiniz.</p>
<p>&#8220;elmalar&#8221; in degerinin degismesi ise, yine fonksiyona &#8220;elmalar&#8221; degiskeninin adresinin bir kopyasi gecirildigi halde, bu adres ana programdaki &#8220;elmalar&#8221; a karsilik geldigi icin, fonksiyonda bu adresteki degeri degistirir degistirmez, &#8220;elmalar&#8221; in da degeri degismis olur.</p>
]]></content:encoded>
			<wfw:commentRss>http://c.hepsiproje.org/?feed=rss2&amp;p=5</wfw:commentRss>
		</item>
		<item>
		<title>POINTER NASIL TANIMLANIR</title>
		<link>http://c.hepsiproje.org/?p=4</link>
		<comments>http://c.hepsiproje.org/?p=4#comments</comments>
		<pubDate>Mon, 19 May 2008 15:37:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[pointer]]></category>

		<category><![CDATA[c programlama]]></category>

		<category><![CDATA[POINTER NASIL TANIMLANIR]]></category>

		<guid isPermaLink="false">http://c.hepsiproje.org/?p=4</guid>
		<description><![CDATA[Pointer Nasıl Tanımlanır ?
Programin ucuncu satirinda, ilk once &#8220;index&#8221; isimli degisken tanimlanir, daha sonra da iki tane pointer tanimlamasi goreceksiniz. Ikinci tanim, su sekilde okunabilir: &#8220;pt1&#8242;in gosterecegi adres, bir tamsayi degiskenine ait olacak.&#8221; Yani, &#8220;pt1&#8243;, tamsayi bir degiskeninin pointer&#8217;i olur. Ayni sekilde, &#8220;pt2&#8243; de, yine bir tamsayi degiskeninin pointer&#8217;i olur.
Bir pointer, bir degiskenin adresini tasimak [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Pointer Nasıl Tanımlanır ?</strong></p>
<p>Programin ucuncu satirinda, ilk once &#8220;index&#8221; isimli degisken tanimlanir, daha sonra da iki tane pointer tanimlamasi goreceksiniz. Ikinci tanim, su sekilde okunabilir: &#8220;pt1&#8242;in gosterecegi adres, bir tamsayi degiskenine ait olacak.&#8221; Yani, &#8220;pt1&#8243;, tamsayi bir degiskeninin pointer&#8217;i olur. Ayni sekilde, &#8220;pt2&#8243; de, yine bir tamsayi degiskeninin pointer&#8217;i olur.</p>
<p>Bir pointer, bir degiskenin adresini tasimak icin tanimlanir. Tanimlandigindan baska bir degisken tipi icin kullanimi &#8220;uyumsuz veri tipi&#8221; hatasinin olusmasina sebep olur. Ornegin, &#8220;float&#8221; tipi bir pointer, &#8220;int&#8221; tipli bir degiskenin adresini alamaz.</p>
<blockquote>
<pre>main<span class="operator">(</span><span class="operator">)</span>
<span class="operator">{</span>
<span class="type">char</span> katar<span class="operator">[</span>40<span class="operator">]</span><span class="operator">,</span><span class="operator">*</span>orada<span class="operator">,</span>bir<span class="operator">,</span>iki;
<span class="type">int</span> <span class="operator">*</span>pt<span class="operator">,</span>list<span class="operator">[</span>100<span class="operator">]</span><span class="operator">,</span>index;

strcpy<span class="operator">(</span>katar<span class="operator">,</span>&#8220;Bu bir karakter kataridir<span class="operator">.</span>&#8220;<span class="operator">)</span>;

bir = katar<span class="operator">[</span>0<span class="operator">]</span>; <span class="operator">/</span><span class="operator">*</span> bir ve iki ayni degeri tasirlar <span class="operator">*</span><span class="operator">/</span>
iki = <span class="operator">*</span>katar;
printf<span class="operator">(</span>&#8220;Ilk cikti <span class="operator">%</span>c <span class="operator">%</span>c<span class="=operator">\</span>n&#8221;<span class="operator">,</span>bir<span class="operator">,</span>iki<span class="operator">)</span>;

bir = katar<span class="operator">[</span>8<span class="operator">]</span>; <span class="operator">/</span><span class="operator">*</span> bir ve iki ayni degeri tasirlar <span class="operator">*</span><span class="operator">/</span>
iki = <span class="operator">*</span><span class="operator">(</span>katar<span class="operator">+</span>8<span class="operator">)</span>;
printf<span class="operator">(</span>&#8220;Ikinci cikti <span class="operator">%</span>c <span class="operator">%</span>c<span class="=operator">\</span>n&#8221;<span class="operator">,</span>bir<span class="operator">,</span>iki<span class="operator">)</span>;

orada = katar<span class="operator">+</span>10; <span class="operator">/</span><span class="operator">*</span> katar<span class="operator">+</span>10 ve katar<span class="operator">[</span>10<span class="operator">]</span> aynidir<span class="operator">.</span> <span class="operator">*</span><span class="operator">/</span>
printf<span class="operator">(</span>&#8220;Ucuncu cikti <span class="operator">%</span>c<span class="=operator">\</span>n&#8221;<span class="operator">,</span>katar<span class="operator">[</span>10<span class="operator">]</span><span class="operator">)</span>;
printf<span class="operator">(</span>&#8220;Dorduncu cikti <span class="operator">%</span>c<span class="=operator">\</span>n&#8221;<span class="operator">,</span><span class="operator">*</span>orada<span class="operator">)</span>;

<span class="flow">for</span> <span class="operator">(</span>index = 0;index &lt; 100;index<span class="operator">+</span><span class="operator">+</span><span class="operator">)</span>
list<span class="operator">[</span>index<span class="operator">]</span> = index <span class="operator">+</span> 100;
pt = list <span class="operator">+</span> 27;
printf<span class="operator">(</span>&#8220;Besinci cikti <span class="operator">%</span>d<span class="=operator">\</span>n&#8221;<span class="operator">,</span>list<span class="operator">[</span>27<span class="operator">]</span><span class="operator">)</span>;
printf<span class="operator">(</span>&#8220;Altinci cikti <span class="operator">%</span>d<span class="=operator">\</span>n&#8221;<span class="operator">,</span><span class="operator">*</span>pt<span class="operator">)</span>;
<span class="operator">}
</span></pre>
</blockquote>
<p>Bu programda, iki tane pointer, iki tane dizi ve uc tane degisken tanimliyoruz. &#8220;orada&#8221; isimli pointer, karakter tipi, ve &#8220;pt&#8221; ise, tamsayi tipindedir.</p>
<p><strong>Bir Katar Değişkeni Aslında Pointerdır.</strong></p>
<p>C programlama dilinde, bir katar degiskeni, o katarin baslangicini gosteren bir pointer olarak tanimlanmistir. Programda bir bakin: once &#8220;katar&#8221; isimli diziye sabit bir katar atiyoruz. Daha sonra, &#8220;bir&#8221; isimli degiskene, &#8220;katar&#8221; in ilk harfini atiyoruz. Sonra, &#8220;iki&#8221; isimli degiskene, ayni degeri atiyoruz. Ikinci satirda &#8220;*katar[0]&#8221; yazmak yalnis olurdu, cunku yildiz isareti, koseli parantezlerin yerini almaktadir.</p>
<p>&#8220;katar&#8221; i neredeyse tam bir pointer gibi kullanabilirsiniz, yegane farki, tuttugu adres degistirilemez, ve daima o katarin baslangic adresini gosterir.</p>
<p>Onkinci satira gelince, katarin dokuzuncu karakterinin (sifirdan basladigimiz icin), iki ayri sekilde &#8220;bir&#8221; ve &#8220;iki&#8221; isimli degiskenlere atandigini goruyoruz.</p>
<p>C programlama dili, pointer&#8217;in tipine gore, index ayarlamasini otomatik olarak yapar. Bu durumda, &#8220;katar&#8221; bir &#8220;char&#8221; olarak tanimlandigi icin, baslangic adresine 8 eklenir. Sayet &#8220;katar&#8221; &#8220;int&#8221; (tamsayi) olarak tanimlanmis olsa idi, index iki ile carpilip, &#8220;katar&#8221; in baslangic adresine eklenirdi.</p>
<p>&#8220;orada&#8221; bir pointer oldugu icin, 16. satirda &#8220;katar&#8221; in 11. elemaninin adresini tasiyabilir. &#8220;orada&#8221; gercek bir pointer oldugu icin, herhangi bir karakter degiskeninin adresini gosterebilir.</p>
]]></content:encoded>
			<wfw:commentRss>http://c.hepsiproje.org/?feed=rss2&amp;p=4</wfw:commentRss>
		</item>
		<item>
		<title>POINTER NEDİR?</title>
		<link>http://c.hepsiproje.org/?p=3</link>
		<comments>http://c.hepsiproje.org/?p=3#comments</comments>
		<pubDate>Mon, 19 May 2008 15:26:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[pointer]]></category>

		<category><![CDATA[c]]></category>

		<category><![CDATA[c programlama]]></category>

		<category><![CDATA[c programlama dili]]></category>

		<category><![CDATA[programlama]]></category>

		<guid isPermaLink="false">http://c.hepsiproje.org/?p=3</guid>
		<description><![CDATA[Pointer Nedir?
Basitce, pointer, bir adrestir. Bir degisken olmak yerine, bir degiskenin hafizadaki adresini tasiyan bir &#8216;ok isareti&#8216;dir.

main() /* Pointer kullanimi ornegi */
{
int index,*pt1,*pt2;

index = 39; /* herhangi bir deger */
pt1 = &#38;index; /* &#8216;index&#8217; in adresi */
pt2 = pt1;

printf(&#8220;Deger simdi %d %d %d dir.\n&#8221;,index,*pt1,*pt2);

*pt1 = 13; /* &#8216;index&#8217; in degerine degisiklik yapalim */

printf(&#8220;Degistikten sonra ise [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Pointer Nedir?</strong></p>
<p>Basitce, pointer, bir adrestir. Bir degisken olmak yerine, bir degiskenin hafizadaki adresini tasiyan bir &#8216;<strong>ok isareti</strong>&#8216;dir.</p>
<blockquote>
<pre>main<span class="operator">(</span><span class="operator">)</span> <span class="operator">/</span><span class="operator">*</span> Pointer kullanimi ornegi <span class="operator">*</span><span class="operator">/</span>
<span class="operator">{</span>
<span class="type">int</span> index<span class="operator">,</span><span class="operator">*</span>pt1<span class="operator">,</span><span class="operator">*</span>pt2;

index = 39; <span class="operator">/</span><span class="operator">*</span> herhangi bir deger <span class="operator">*</span><span class="operator">/</span>
pt1 = &amp;index; <span class="operator">/</span><span class="operator">*</span> &#8216;index&#8217; in adresi <span class="operator">*</span><span class="operator">/</span>
pt2 = pt1;

printf<span class="operator">(</span>&#8220;Deger simdi <span class="operator">%</span>d <span class="operator">%</span>d <span class="operator">%</span>d dir<span class="operator">.</span><span class="=operator">\</span>n&#8221;<span class="operator">,</span>index<span class="operator">,</span><span class="operator">*</span>pt1<span class="operator">,</span><span class="operator">*</span>pt2<span class="operator">)</span>;

<span class="operator">*</span>pt1 = 13; <span class="operator">/</span><span class="operator">*</span> &#8216;index&#8217; in degerine degisiklik yapalim <span class="operator">*</span><span class="operator">/</span>

printf<span class="operator">(</span>&#8220;Degistikten sonra ise <span class="operator">%</span>d <span class="operator">%</span>d <span class="operator">%</span>d<span class="=operator">\</span>n&#8221;<span class="operator">,</span>index<span class="operator">,</span><span class="operator">*</span>pt1<span class="operator">,</span><span class="operator">*</span>pt2<span class="operator">)</span>;
<span class="operator">}
</span></pre>
</blockquote>
<p>Su an icin, programin index degiskenini ve iki tane astrisk ile baslayan terimlerin tanimlandigi yere bakmayin. Aslinda astrisk denilen bu isarete, biz simdilik &#8216;yildiz&#8217; diyelim.</p>
<p>Programda ilk once, index degiskenine 39 degerini atiyoruz. Bunun altindaki satirda ise, pt1&#8242;e tuhaf bir deger atanmasini goruyoruz - index degiskeni, ve onunde bir &amp; ampersand isareti ile. Bu ornekte, pt1 ve pt2 pointer dir, ve index de basit bir degiskendir. Simdi bir problemle karsi karsiyayiz. Bu programda pointer kullaniliyor, fakat nasil kullanilacagini ogrenmedik.</p>
<p>Bu gorecekleriniz biraz aklinizi karistiracak, fakat bunlari anlamadan gecmeyin.</p>
<p><strong>iki önemli kural</strong></p>
<ul style="list-style-type: decimal;">
<li>Onune ampersand isareti konmus bir degisken, o degiskenin adresini belirtir. Yani altinci satir, soyle okunabilir: &#8220;pt1, index isimli degiskenin adresini alir.&#8221;</li>
<li>Onune yildiz konmus bir pointer, kendisinin tuttugu adreste bulunan degeri gosterir. Programin dokuzuncu satiri, soyle okunabilir: &#8220;pt1 pointer&#8217;inin gosterdigi yere, 13 degeri atandi.&#8221;</li>
</ul>
<p><strong>Hafıza Yardımcısı</strong></p>
<ul style="list-style-type: decimal;">
<li>&amp; &#8216;i bir adres olarak dusunun</li>
<li>* &#8216;i adresteki deger olarak dusunun.</li>
</ul>
<p>pt1 ve pt2 pointer olarak, kendileri bir deger tasimazlar, fakat bellekteki bir adresi gosterirler. Bu programda, &#8216;index&#8217; degiskenini gosteren pointer&#8217;lar oldugu icin, degiskenin degerini hem index ile, hemde onun adresini tasiyan pointer&#8217;lar ile degistirebiliriz.</p>
<p>Dokuzuncu satirda, index degiskeninin degeri, pt1 pointer&#8217;i ile degistiriliyor. Program icinde &#8216;index&#8217; i kullandigimiz herhangi biryerde, (pt1 baska birseye atanincaya kadar), &#8216;*pt1&#8242; i de kullanmamiz mumkundur, cunku pt1, index&#8217;in adresini tasimaktadir.</p>
<p><strong>Bir Başka Pointer</strong></p>
<p>Programa degisklik katmak icin, birbaska pointer daha tanimladim. &#8220;pt2&#8243; isimli bu pointer, yedinci satirda &#8220;pt1&#8243;&#8216;in tasidigi adresi almaktadir. Bu atamadan once, ayni henuz deger atanmamis degiskenler gibi icinde rastgele bilgiler vardir. Bundan sonra, &#8220;pt2&#8243; de &#8220;index&#8221; degiskeninin adresini tasimaktadir. Ornegin, dokuzuncu satirda &#8220;*pt1&#8243; i &#8220;*pt2&#8243; ile degistirsek de, sonuc ayni olacaktir - cunku iki pointer da ayni adresi tasimaktadir.</p>
<p><strong>Sadece Bir Değişken</strong></p>
<p>Bu programda uc tane degisken var gibi gorunse de, aslinda bir tane degisken tanimlidir. Iki pointer ise, bu degiskenin adresini tutmaktadir. Bu durum, &#8220;printf&#8221; komutunun hep 13 degerini yazmasindan da anlasilabilir.</p>
<p>Bu gercekten anlamasi zor bir kavramdir, fakat en kucuk C programlari disinda hepsi tarafindan kullanildigi icin, ogrenmeniz gereklidir.</p>
]]></content:encoded>
			<wfw:commentRss>http://c.hepsiproje.org/?feed=rss2&amp;p=3</wfw:commentRss>
		</item>
	</channel>
</rss>
