PDA

Tam Sürümünü Görmek İçin : pointer olayi?


lucyanobg
22/12/2004, 00:09
ustadlar lutfen bana su gosterge olayini anlatin yaa...ne kadar da aciklamalari okusam bi turlu mantigini anlayamiyorum..


lucyanobg
22/12/2004, 00:11
ok baska bi degiskenin adresini gosterir.ama gosterirse ne oluyo.ne anlami var bunun?

Volkan Uzun
22/12/2004, 00:14
pointer temel olarak bir hafiza bolumunu gosteren degisken turlerine verilen isim.
cok genel olarak hafizada bir bolumu gosterirler.
ornek olarak:
char ch = 'x';
yazdiginda bu 'x' degeri hafizada bir bolumde saklanir, sen buna ch degiskenini cagirarak ulasirsin.
buna ikinci bir erisim yoluda 'x' saklandigi adresi bilmektir.
ornek olarak bu adres hafizada 1000 nolu boilumde saklansin.
simdi; sen char *p = &ch yazdiginda, p gostergesine ch in adresini alirsin.
yani;
ch ='x' olur
p ise 1000 olur.
peki bu adresteki bir degeri degistirmek istersek ne yapmamiz gerekir; iki yontem gene:
ch ='a' diyebiliriz veya
*p='a' diyebiliriz.
pratikte budur.
===================
avatanjlari nedir dersen; mesela bir fonksiyonuna parametre gonderdigini dusunelim; ornek olarak; bir classin var icinde de bir suru veri var; bunu komple olarak fonksiyonuna gondermek yerine, adresini gondermek performans getirir, ayrica bazi yan etkileride ortadan kaldirir.
==============
baska bir avantaji stack (yigit ) bolum yerine heap ( turkcesini bilmiyorum ) bolumden adres almani saglar.
==============

lucyanobg
22/12/2004, 23:15
ustam aciklaman icin cok tesekkurler kafamda oturmaya basladi pointer konusu.

Darkstar
22/12/2004, 23:59
ey çekirge, pointerları anladıgın zaman gözündeki perde kalkar.. görünmezler görünür olur.... ıraklar yakın olur... pointerları öğrendinmi C'yi öğrendin demektir :)

UnBiaSeD
27/12/2005, 03:35
hay bu pointerler warya... yapana helal olsun

nilsonmandela
30/12/2005, 23:08
Burada da konuşulmuş
http://forum.ceviz.net/showthread.php?t=24213

argada
24/01/2006, 22:09
sanal programcı evt gerçekten güzel anlatmışsın.. bende biraz takılıyorum.. sağolun varolun yeah..

Ansugo
24/01/2006, 22:56
pointer temel olarak bir hafiza bolumunu gosteren degisken turlerine verilen isim.

Bu kadar. Temiz, öz ve ne olduğunu anlatacak tanım.

Ama nedense ya hocalardan ya kitap yazarlarından dolayı herkeste pointerler zordur diye bir kanı oluşmuş. Hocaları bilmem ama okuduğum kitaplarda hep "İşte en zor kısma geldik", "Pointerler zordur" gibi cümlelerle işe giriliyor.

Ben açıkcası bu tür girişlerden ve genel kanı yüzünden öğrenmek isteyenlere zor geldiğini düşünüyorum. Yani işin içinde acaip bir sosyal etki var gibi geliyor bana.

Revne
25/01/2006, 01:21
Pointer hayatımın kadını... :)

coddy
29/01/2006, 18:52
Birazda ben açıklayım canım çekti:)
Bir fonkisyon yazarak anlatayım.Örnek olarak

#include <iostream>
#include <ostream>
void degis(int coddy)
{
coddy=40
}

int main ()
{
int coddy;

coddy=300;
degis(coddy);
std::cout<<"coddy= "<< coddy <<endl;
}

yukardaki programa bakarsanız coddy değeri 300 ü 40 ile değiştirmek isteniyor.Ama program çıktısı yine 300.Nedenine gelince fonksiyondaki coddy ile programdaki coddy arasında hiç bir bağ yoktur.

Fakat ana fonkisyon içindeki coddy nin önüne & getirip,degis fonkisyonu içindeki coddy değişkenlerinin ikisinede * işareti koyarsak.Ana fonksiyonda kullanılan coddy değişkeni degis fonkisyonunda da adreslenmesi sağlanır.

Şöyle :D

#include <iostream>
#include <ostream>
void degis(int *coddy)
{
*coddy=40
}

int main ()
{
int coddy;

coddy=300;
degis(&coddy);
std::cout<<"coddy= "<< coddy <<endl;
}

acehreli
29/01/2006, 20:45
Tesekkurler coddy, ama kodunda iki tane yaygin yanlis kullanim var:

1) void main standart degildir, dogrusu 'int main'dir.

2) <iostream.h> standart oncesi ve acayip eski bir basliktir. Onun yerine <iostream>'i kullanmak gerek.

Ayrica, aslinda cout ve endl'i her ortamda kullanmak icin (hatta galiba operator<<'u de), onlari tanimlayan <ostream> basliginin da eklenmesi gerekir. Ama bunu kimse yapmiyor (ben de yapmiyorum :) ); hatta Stroustrup bile kitaplarinda <ostream> eklemeden ornekler verir. Sonucta tam dogru olabilmek icin aslinda soyle yazmaliyiz:


#include <iostream>
#include <ostream>

int main()
{
/* ... */
}


Ali

coddy
30/01/2006, 02:24
el alışkanlıkları,yanlış kalan bilgiler böyle hatalara neden oluyor.Teşekkürler.Düzelteyim hemen.:)

mazbil
30/01/2006, 08:38
Pointer'ları üniversite yıllarında şöyle kavramıştım:

Kitaplardan veya internetten pointer'larla ilgili 20-25 kadar örneği elle yazarak (copy-paste yapmadan) derlemiştim. Aynı kodlarda değişiklik yapınca neler olduğunu gözlemledim, sonuçları tahmin etmeye çalıştım. Böylelikle pointer'ları 1 (bir) günde hallettim. Pointer'ları anlayınca da pointer'sız bir C'nin anlamsız olduğunu anladım. Belki bu yöntem sana da faydalı olur. Kolay gelsin...