<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ahmet Kakıcı &#187; pointer</title>
	<atom:link href="http://www.ahmetkakici.com/tag/pointer/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ahmetkakici.com</link>
	<description>Blog</description>
	<lastBuildDate>Fri, 11 Jun 2010 11:56:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Rasgele Labirent Oluşturma ve Çözme</title>
		<link>http://www.ahmetkakici.com/programlama/rasgele-labirent-olusturma-ve-cozme/</link>
		<comments>http://www.ahmetkakici.com/programlama/rasgele-labirent-olusturma-ve-cozme/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 19:44:04 +0000</pubDate>
		<dc:creator>Ahmet Kakıcı</dc:creator>
				<category><![CDATA[Programlama]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[kod]]></category>
		<category><![CDATA[pointer]]></category>

		<guid isPermaLink="false">http://www.ahmetkakici.com/?p=88</guid>
		<description><![CDATA[Aşağıdaki program çalışan ve bir şeye benzeyen ilk C programım diyebilirim :) Tabii ilk programım olmasından dolayı optimum şekilde çalışmıyor olabilir. Ayrıca programı yazdığım zamanda görsel programlama namına bir şey bilmediğim için program konsoldan çalışıyor. Sadece kod verip bırakmak istemedim ve az da olsa ne yaptığımı açıklayım dedim. Öncelikle programın üç ana özelliğini belirtmeliyim sanırım; [...]


Benzer yazılar:<ol><li><a href='http://www.ahmetkakici.com/programlama/programlama-ipuclari/' rel='bookmark' title='Permanent Link: Programlama İpuçları'>Programlama İpuçları</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Aşağıdaki program çalışan ve bir şeye benzeyen ilk C programım diyebilirim :) Tabii ilk programım olmasından dolayı optimum şekilde çalışmıyor olabilir. Ayrıca programı yazdığım zamanda görsel programlama namına bir şey bilmediğim için program konsoldan çalışıyor.</p>
<p>Sadece kod verip bırakmak istemedim ve az da olsa ne yaptığımı açıklayım dedim. Öncelikle programın üç ana özelliğini belirtmeliyim sanırım;</p>
<p><span id="more-88"></span></p>
<p>-Her seferinde rasgele bir labirent oluşturulacak</p>
<p>-Labirent üzerinde kapalı yani ulaşılamayan bir bölge olmayacak</p>
<p>-Son olarak labirent çözülecek :)</p>
<p>Ana hatları söyledikten sonra programın çalışmasına gelelim.</p>
<p>Labirenti oluşturacak alan belirlendikten sonra (ör 10&#215;10) bu çerçeve üzerinde bulunan her noktayı bir listeye ekleniyor. Daha sonra bu noktalardan biri rasgele olarak seçiliyor. Bu nokta başlangıç alınarak daha önceden belirlenen adım sayısı kadar rasgele yönlerde ilerlenerek duvar örülüyor. Rasgele yönlerde atılan bu adımlar sonrasında oluşan yeni duvarlar çerçevenin olduğu listeye ekleniyor. Başlangıç olarak seçtiğimz ilk nokta ise listeden siliniyor.Yeni bir adım atılıp duvar örüldüğünde dikkat edilmesi gereken nokta ise kapalı alan oluşturmamaktır.</p>
<p>Labirenti çözmek ise oluşturmaktan çok daha kolay. Klasik <strong><a href="http://en.wikipedia.org/wiki/Self-avoiding_walk" target="_blank">self avoding walk</a></strong> algoritmasıyla çözüme gidilmiştir. Labirentin sol en üst köşesi başlangıç, sağ en alt köşesi ise bitiş noktası olarak belirlenmiş ve çözüm ona göre çalışmaktadır. Tabii değiştirmek sizin elinizde :)</p>
<pre class="brush: cpp;">
///////////////////////////////////////////////////
/*             HEADER DOSYALARI                  */
///////////////////////////////////////////////////
#include &quot;conio.h&quot;
#include &quot;stdlib.h&quot;
#include &quot;stdio.h&quot;
#include &quot;iostream.h&quot;
#define STEP 5
#define YOL 0
#define YOL2 1
#define GEREKSIZ -6
#define DUVAR -2
#define pasifDUVAR -5
#define DUGUM -1
#define eskiDUGUM -3
#define pasifDUGUM -4
#include &lt;time.h&gt;

///////////////////////////////////////////////////
/*                LISTE YAPISI                   */
///////////////////////////////////////////////////
struct Item {
	struct Item *next;
	int val1,val2;    // Dizi iki boyutlu oldugu icin 2 elemanli liste olusturdum.
};

struct List {
	struct Item *list;
};

///////////////////////////////////////////////////
/*     LISTE FONKSIYONLARININ PROTOTIPLERI       */
///////////////////////////////////////////////////
	struct List *liste_yarat(struct List *pl);			//Liste Olusturuyor
	void listeye_ekle(struct List *pl,int,int);			//Listeye eleman ekliyor
	void listeden_sil(struct List *pl,int,int);			//Listeden eleman siliyor
	void liste_gez(struct List *pl,int ,int&amp; , int&amp;);	//Listeden n. siradaki elemani aliyor
	void liste_goster(struct List *pl);					//Lisde degerlerini yazdiriyor
	int  uzunluk(struct List *pl);						//Liste uzunlugunu veriyor
	bool arama(int,int);								//listede eleman ariyor
///////////////////////////////////////////////////
/*         DIGER FONKSIYON PROTOTIPLERI          */
///////////////////////////////////////////////////
	void degeryaz(int **);                             	//ekrana labirenti ciziyor
	void diziyap();                                    	//dinamik dizi olusturuyor
	void duzenle();                                    	//bos labirent olusturuyor
	void kontrol(int,int);                             	//kapali alan kontrolu yapiyor
	void ilerle(int ,int);                             	//duvar olusturuyor
	int rasgele(int);                                  	//random sayi uretiyor
	void devam(int, int);                              	//adim sayisini tutuyor
	void ayikla();                                     	//gereksiz dugumleri ayikliyor
	void labirent();                                   	//Genel fonksiyon
	void yonbul(int , int );                           	//cikis yolunu buluyor
	int adim_sayisi();									//cikisa kac adim var
///////////////////////////////////////////////////
/*       KULLANACAGIM DEGISKENLER, GLOBAL        */
///////////////////////////////////////////////////
	int **dizi,**dizii,x,y,val1,val2,yon,adim=0,varmi=0;
/*/////////////////////////////////////////////////////
//dizi=&gt;Labirenti tutuyor                            //
//x,y=&gt; labirent boyutlari                           //
//val1,val2=&gt;Liste degerlerini almak icin kullandim  //
//yon=&gt;gidilecek yonu tutuyor                        //
//adim=&gt;kac adim gidildigini tutuyor                 //
//varmi=&gt;labirent olup olmadigini tutuyor            //
*//////////////////////////////////////////////////////

	struct List *l1;

//###############################################//
/*               MAIN FONKSIYONU                 */
//###############################################//

main(){

	l1=liste_yarat(l1);                // Listemi yaratyiyorum
	char ch='1';                      // Kullanici arayuzu
	while(ch!='2')   {
		cout&lt;&lt;endl&lt;&lt;
		&quot;0-Ekrani temizle&quot;&lt;&lt;endl&lt;&lt;
		&quot;1-Yeni labirent Olustur&quot;&lt;&lt;endl&lt;&lt;
		&quot;2-Programdan Cik&quot;&lt;&lt;endl;
		if(varmi==1){
			cout&lt;&lt;&quot;3-Labirenti Coz&quot;&lt;&lt;endl;
		}
		ch=getch();
		if(ch=='1'){
			clrscr();labirent();yonbul(1,1);varmi=1;
		}
		else if (ch=='2'){
			clrscr();
			cout&lt;&lt;endl&lt;&lt;
			&quot;Veri Yaplilari Labirent Olusturma Odevi\nYazan:Ahmet KAKICI - 150165\nCikmak icin herhangi bir tusa basiniz.&quot;;
			getch();
		}
		else if(ch=='3'){
			clrscr();
			degeryaz(dizi);
			cout&lt;&lt;endl;
			degeryaz(dizii);
			cout&lt;&lt;&quot;Labirentten &quot;&lt;&lt;adim_sayisi()&lt;&lt;&quot; adimda cikildi.&quot;&lt;&lt;endl;
			varmi=0;
		}
		else if(ch=='0'){
			clrscr();
		}
	}
}

//////////////////////////////////////////////////
/*  SELF AVOIDING WALK ve LABIRENTTEN CIKIS     */
//////////////////////////////////////////////////

void yonbul(int a, int b){

	int xMax=x-1,yMax=y-1;
	if(a==x-2 &amp;&amp; b==y-2){
		for(int i=0;i&lt;x;i++)
		for(int j=0;j&lt;y;j++)
		dizii[i][j]=dizi[i][j];
		return;
	}

	if(b+2&lt;yMax &amp;&amp; dizi[a][b+1]==pasifDUVAR &amp;&amp; dizi[a][b+2]==YOL){
		dizi[a][b+2]=YOL2;
		yonbul(a,b+2);
		dizi[a][b+2]=YOL;
	}
	if(a-2&gt;0 &amp;&amp; dizi[a-1][b]==pasifDUVAR &amp;&amp; dizi[a-2][b]==YOL){
		dizi[a-2][b]=YOL2;
		yonbul(a-2,b);
		dizi[a-2][b]=YOL;
	}
	if(b-2&gt;1 &amp;&amp; dizi[a][b-1]==pasifDUVAR &amp;&amp; dizi[a][b-2]==YOL){
		dizi[a][b-2]=YOL2;
		yonbul(a,b-2);
		dizi[a][b-2]=YOL;
	}
	if(a+2&lt;xMax &amp;&amp; dizi[a+1][b]==pasifDUVAR &amp;&amp; dizi[a+2][b]==YOL){
		dizi[a+2][b]=YOL2;
		yonbul(a+2,b);
		dizi[a+2][b]=YOL;
	}
}
///////////////////////////////////////////////////
/*      LABIRENT OLUSTURMA FONKSIYONU            */
///////////////////////////////////////////////////
void labirent(){
	srand(time(NULL));
	cout&lt;&lt;endl&lt;&lt;&quot;Labirent boyutlarini gir&quot;&lt;&lt;endl&lt;&lt;&quot;x=&quot;;
	cin&gt;&gt;x;
	cout&lt;&lt;endl&lt;&lt;&quot;y=&quot;;
	cin&gt;&gt;y;
	diziyap();
	duzenle();

	while((uzunluk(l1))&gt;0){
		liste_gez(l1,rasgele(uzunluk(l1)),val1,val2);
		ilerle(val1,val2);
		ayikla();
	}
	degeryaz(dizi);
}
///////////////////////////////////////////////////
/*          DIZI OLUSTURMA FONKSIYONU            */
///////////////////////////////////////////////////
void diziyap()
{
	x=x*2+1;
	y=y*2+1;
	dizi=new int *[x];
	dizii=new int *[x];
	for(int i=0;i&lt;x;i++){
		dizi[i]=new int[y];
		dizii[i]=new int[y];
	}
}
///////////////////////////////////////////////////
/*       RASGELE SAYI URETEN FONKSIYON           */
///////////////////////////////////////////////////
int rasgele(int n)
{
	return rand()%n;
}
///////////////////////////////////////////////////
/*       ADIM SAYISINI TUTAN FONKSIYON           */
///////////////////////////////////////////////////
int adim_sayisi()
{
	int adimSayisi=0;
	for(int i=0;i&lt;x;i++){
		for(int j=0;j&lt;y;j++){
			if(dizii[i][j]==YOL2){
				adimSayisi++;
			}
		}
	}
	return adimSayisi;
}
///////////////////////////////////////////////////
/*   DIZI DEGERLERINI YAZAN FONKSIYON            */
///////////////////////////////////////////////////
void degeryaz(int **dizim){
	for(int i=0;i&lt;x;i++){
		for(int j=0;j&lt;y;j++){
			if(dizim[i][j]==DUVAR)
			cout&lt;&lt;'\xDB'&lt;&lt;'\xDB';
			else if(dizim[i][j]==YOL)
			cout&lt;&lt;&quot; &quot;&lt;&lt;&quot; &quot;;
			else if(dizim[i][j]==YOL2)
			cout&lt;&lt;&quot;_&quot;&lt;&lt;&quot;_&quot;;
			else if (dizim[i][j]==pasifDUGUM)
			cout&lt;&lt;'\xDB'&lt;&lt;'\xDB';
			else if (dizim[i][j]==eskiDUGUM ||dizim[i][j]==GEREKSIZ || dizim[i][j]==-2 )
			cout&lt;&lt;'\xDB'&lt;&lt;'\xDB';
			else cout&lt;&lt;' '&lt;&lt;&quot; &quot;;
		}
		cout&lt;&lt;endl;
	}
}
///////////////////////////////////////////////////
/*      LABIRENTIN BOS HALINI OLUSTURUYOR        */
/*     ILK DUGUM NOKTALARINI LISTEYE ATIYOR      */
///////////////////////////////////////////////////
void duzenle(){
	int xx,yy;
	xx=x-1;
	yy=y-1;
	for(int i=0;i&lt;x;i++){
		for(int j=0;j&lt;y;j++){
			if( i==0 || j==0 || i==xx || j==yy)
				dizi[i][j]=GEREKSIZ;          			//KENARLARDAKI GEREKSIZ YERLER
			if(  (  (j==0 ||j==yy) &amp;&amp; j%2==0)|| ( (i==0||i==xx) &amp;&amp; i%2==0) ){
				dizi[i][j]=DUGUM;    					//LABIRENTIN KENARLARINI
				listeye_ekle(l1,i,j);     				//LISTEYE EKLE
			}
			else if (i%2!=0 &amp;&amp; j%2!=0){     			//GIDILECEK YOLLAR
				dizi[i][j]=YOL;
			}
			else if( ((i%2!=0 &amp;&amp; j!=0 &amp;&amp; j!=yy) &amp;&amp;  j%2==0)||(i%2==0 &amp;&amp; (i!=0 &amp;&amp; i!=xx &amp;&amp;  j%2!=0)) ){
				dizi[i][j]=pasifDUVAR;            		//PASIF DUVARLAR
			}
			else if(i%2==0 &amp;&amp; j%2==0){
				dizi[i][j]=pasifDUGUM;           		//PASIF DUGUMLER
			}
			//else dizi[i][j]=8;
		}
	}
	//LABIRENTIN KOSELERINDEKI DUGUMLERI LISTEDEN SIL
	listeden_sil(l1,0,0);dizi[0][0]=eskiDUGUM;
	listeden_sil(l1,xx,0);dizi[xx][0]=eskiDUGUM;
	listeden_sil(l1,0,yy);dizi[0][yy]=eskiDUGUM;
	listeden_sil(l1,xx,yy);dizi[xx][yy]=eskiDUGUM;
}
///////////////////////////////////////////////////
/*  LABIRENTTE DUVAR OREREK ILERLEME FONKSIYONU  */
///////////////////////////////////////////////////
void ilerle(int Xnokta,int Ynokta){
	yon=rasgele(4);
	int a=Xnokta;
	int b=Ynokta;

	if(Xnokta==0)yon=3;
	if(Ynokta==0)yon=1;
	if(Xnokta==x-1)yon=0;
	if(Ynokta==y-1)yon=2;
    //liste_goster(l1);

	// Kuzey =&gt; 0 , dogu =&gt;1 , bati=&gt;2 , guney=&gt; 3,
	if(yon==0){             //KUZEY
		if(a-2&gt;0){
			if(dizi[a-2][b]==pasifDUGUM){
				dizi[a-1][b]=DUVAR;
				kontrol(a-2,b);
				kontrol(a,b);
				devam(a-2,b);
			}
		}
	}

	if(yon==1){         // DOGU
		if(b+2&lt;y){
			if(dizi[a][b+2]==pasifDUGUM){
				dizi[a][b+1]=DUVAR;
				kontrol(a,b+2);
				kontrol(a,b);
				devam(a,b+2);
			}
		}
	}
	if(yon==2){        // BATI
		if(b-2&lt;0){
			if(dizi[a][b-2]==pasifDUGUM){
				dizi[a][b-1]=DUVAR;
				kontrol(a,b-2);
				kontrol(a,b);
				devam(a,b-2);
			}
		}
	}
	if(yon==3){             // GUNEY
		if(a+2&lt;x){
			if(dizi[a+2][b]==pasifDUGUM){
					dizi[a+1][b]=DUVAR;
					kontrol(a+2,b);
					kontrol(a,b);
					devam(a+2,b);
			}
		}
	}

}  //gezi func. sonu

void devam(int Xnokta,int Ynokta)
{
	if(adim&lt;STEP){
		adim++;
		ilerle(Xnokta,Ynokta);
    }
	else{
		adim = 0;
	}
}
 ///////////////////////////////////////////////////
/*                   AYIKLA  FONKSIYONU          */
//////////////////////////////////////////////////
void ayikla(){
	for (int i=0;i&lt;uzunluk(l1);i++){
		liste_gez(l1,i,val1,val2);
		kontrol(val1,val2);
	}
}
////////////////////////////////////////////////////
/*                KONTROL  FONKSIYONU            */
//////////////////////////////////////////////////
void kontrol(int Xnokta,int Ynokta)
{
	int cevre = 0;

	if(Ynokta+2&lt;y){
		if(dizi[Xnokta][Ynokta+2]==pasifDUGUM ){
			cevre++;
		}
	}
	if(Ynokta-2&gt;0){
		if(dizi[Xnokta][Ynokta-2]==pasifDUGUM ){
			cevre++;
		}
	}
	if(Xnokta+2&lt;x){
		if(dizi[Xnokta+2][Ynokta]==pasifDUGUM ){
			cevre++;
		}
	}
	if(Xnokta-2&gt;0){
		if( dizi[Xnokta-2][Ynokta]==pasifDUGUM){
			cevre++;
		}
	}
	if (cevre==0){
		dizi[Xnokta][Ynokta]=eskiDUGUM;
		listeden_sil(l1,Xnokta,Ynokta);
	}
	else if( cevre!=0 &amp;&amp; (dizi[Xnokta][Ynokta]!=DUGUM)){
		if(!(arama(Xnokta,Ynokta))){
			listeye_ekle(l1,Xnokta,Ynokta);
		}
		dizi[Xnokta][Ynokta]=DUGUM;
	}
}
 ///////////////////////////////////////////////////
/*             LISTE FONKSIYONLARI                */
///////////////////////////////////////////////////

///////////////////////////////////////////////////
/*           LISTE YARATMA FONKSIYONU           */
//////////////////////////////////////////////////
struct List *liste_yarat(struct List *pl){
	pl=(struct List *)malloc(sizeof(struct List));
	pl-&gt;list=0;
	return pl;
}
///////////////////////////////////////////////////
/*      LISTE UZUNLUGUNU BULAN FONKSIYON         */
///////////////////////////////////////////////////
int uzunluk(struct List *pl){
	struct Item *tmp=pl-&gt;list;
	int uzun=0;
	while(tmp){
		uzun++;
		tmp=tmp-&gt;next;
	}
	return(uzun);
}
///////////////////////////////////////////////////
/*      LISTEDEN ELEMAN SILEN FONKSIYON          */
///////////////////////////////////////////////////
void listeden_sil(struct List *pl,int val1,int val2){
	struct Item *prv, *pt = pl-&gt;list;
	if ( (pt) &amp;&amp; (pt-&gt;val1==val1)&amp;&amp;(pt-&gt;val2==val2)  ){
		pl-&gt;list= pt-&gt;next;
		free(pt);
	}
	else if (pt){
		for ( prv=pt, pt= pt-&gt;next;
			  ((pt) &amp;&amp; ((pt-&gt;val1 != val1) || (pt-&gt;val2 != val2)));
			  prv=prv-&gt;next, pt=pt-&gt;next);
		if ( (pt)&amp;&amp; (pt-&gt;val1==val1) &amp;&amp; (pt-&gt;val2==val2) ){
			prv-&gt;next=pt-&gt;next;
			free(pt);
		}
	}
}
///////////////////////////////////////////////////
/*    LISTE ELEMANLARINI YAZDIRAN FONKSIYON      */
///////////////////////////////////////////////////
void liste_goster(struct List *pl){
	struct Item *tmp=pl-&gt;list;
	while (tmp){
		printf(&quot;%d &quot;, tmp-&gt;val1) ;
		printf(&quot;%d \n&quot;, tmp-&gt;val2) ;
		tmp=tmp-&gt;next;
	}
}
///////////////////////////////////////////////////
/*  LISTE BASINA ELEMAN EKLEYEN FONKSIYON        */
///////////////////////////////////////////////////
void listeye_ekle(struct List *pl,int val1, int val2) {
	struct Item *pt=(struct Item *)malloc(sizeof(struct Item));
	pt-&gt;val1=val1;
	pt-&gt;val2=val2;
	pt-&gt;next=pl-&gt;list;
	pl-&gt;list=pt;
}
///////////////////////////////////////////////////
/*    LISTEDEN n. ELEMANI ALMA FONKSIYONU        */
///////////////////////////////////////////////////
void liste_gez(struct List *pl,int n,int &amp;val1, int &amp;val2){
	struct Item *tmp=pl-&gt;list;
	while(n--&gt;0){
		tmp=tmp-&gt;next;
	}
	val1=tmp-&gt;val1;
	val2=tmp-&gt;val2;
}
bool arama(int xVal,int yVal){
	struct Item *tmp=l1-&gt;list;
	int uzun=uzunluk(l1);
	while(uzun--&gt;0){
		if(tmp-&gt;val1==xVal &amp;&amp; tmp-&gt;val2==yVal){
			return true;
		}
		tmp=tmp-&gt;next;
	}
	return false;
}
</pre>


<p>Benzer yazılar:<ol><li><a href='http://www.ahmetkakici.com/programlama/programlama-ipuclari/' rel='bookmark' title='Permanent Link: Programlama İpuçları'>Programlama İpuçları</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ahmetkakici.com/programlama/rasgele-labirent-olusturma-ve-cozme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pointer ve C#</title>
		<link>http://www.ahmetkakici.com/yazilim/pointer-ve-c/</link>
		<comments>http://www.ahmetkakici.com/yazilim/pointer-ve-c/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 14:53:42 +0000</pubDate>
		<dc:creator>Ahmet Kakıcı</dc:creator>
				<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[csharp]]></category>
		<category><![CDATA[pointer]]></category>
		<category><![CDATA[unsafe]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://www.ahmetkakici.com/?p=43</guid>
		<description><![CDATA[C programlama dilini öğrenme aşamasında en çok dikkat edilecek noktalardan biri kuşkusuz pointer kavramıdır. Web programlama dillerinden C ve türevi dillere geçenlerin de en çok zorlandığı konu sanırım yine pointer konusudur. Derleyicilerin kendi bileşenleri (component) çıkmaya başladığında bir nevi alt seviye kodlardan bizi uzaklaştırdı. Daha sonra Java ve .NET dillerinde hazır gelen kütüphaneler ile artık [...]]]></description>
			<content:encoded><![CDATA[<p>C programlama dilini öğrenme aşamasında en çok dikkat edilecek noktalardan biri kuşkusuz pointer kavramıdır. Web programlama dillerinden C ve türevi dillere geçenlerin de en çok zorlandığı konu sanırım yine pointer konusudur.</p>
<p>Derleyicilerin kendi bileşenleri (component) çıkmaya başladığında bir nevi alt seviye kodlardan bizi uzaklaştırdı. Daha sonra Java ve .NET dillerinde hazır gelen kütüphaneler ile artık pointerdan bir hayli uzaklaşmış durumdayız. [ Bu konu hakkında Faruk Enes'in çok güzel bir yazısı <a href="http://turkce.focusoncode.com/pointer-bilmeyen-programcilar-ve-gelecek/" target="_blank">var</a> ] . Ancak bazı durumlar oluyor ki pointer kullanmadan işin içinden çıkmanın maliyeti oldukça yüksek oluyor.</p>
<p><span id="more-43"></span></p>
<p>Görüntü işleme ile uğraşmaya başladığımda C++ kullanıyordum ve pointerlar ile güzelce geçiniyordum. Ne zaman Visual Studio kullanmaya başlayıp C#&#8217;a geçiş yaptım işte o zaman pointer ile ilk sorunumu da yaşadım. .NET ile gelen GDI fonksiyonlarıyla resimlerden gerekli bilgileri alıp işimi yapabiliyordum ancak C++ ile yaptığımdan kat kat yavaş işlem yapıyordum.</p>
<p>Ve sonrasında bu yazıya konu olan şeyi buldum :) .NET pointer&#8217;lara güvenlikten dolayı [ belleği korumak için ] güvenmiyor ve kullanımını da kısmen yasaklıyordu. Ancak illa pointer kullanacağım diyen kişiler için de açık bir kapı bırakmış:</p>
<p>Visual studio&#8217;yu açtığınızda [genelde] sağda bulunan Solution Explorer&#8217;dan Properties&#8217;e çift tıklayarak açılan pencerede soldan &#8216;Build&#8217;i seçin. Açılan sayfada ise &#8216;Allow unsafe code&#8217; kutucuğuna bir tik attı mı bu iş bitiyor.</p>
<p>Bundan sonra aşağıdaki gibi unsafe kod bloğu içinde pointer kullanabilirsiniz.</p>
<pre class="alt2" dir="ltr">unsafe
{
  // pointer kullanabileceğiniz bölge.
}


<a href="http://www.ahmetkakici.com/wp-content/gallery/blog-post/p.jpg" title="" class="thickbox" rel="singlepic1" >
	<img class="ngg-singlepic" src="http://www.ahmetkakici.com/index.php?callback=image&amp;pid=1&amp;width=320&amp;height=240&amp;mode=web20" alt="p.jpg" title="p.jpg" />
</a>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.ahmetkakici.com/yazilim/pointer-ve-c/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
