[linux-programlama] Re: c pointer sorunu

---------

From: Serdar KÖYLÜ (serdarkoylu@fisek.com.tr)
Date: Fri 08 Aug 2003 - 14:15:53 EEST

  • Next message: msakarya@infotech.com.tr: "[linux-programlama] php"

    Selamlar..

    On Fri, 8 Aug 2003 00:24:37 +0300
    Halil Demirezen <halild@bilmuh.ege.edu.tr> wrote:

    > Boylece 100 nolu stack icinde 2400 degeri var;
    > Benim soru burada: C de
    >
    > str dedigimiz zaman 2400 degeri
    > *str dedigimiz zaman 2400 un ilk hucresindeki deger aklimiza geliyor.
    > Bu konuda sanirim bir problem cekmiyorum.
    >
    > peki ben 100 degerini elde etmek istiyorsam o zaman
    >
    > &str kullanmam gerekiyor deil mi? bu konuda hatam var mi?

    Oncelikle stack, data, text gibi segmentler bellekte ayri seyler degil.
    Yani bunlar dumduz giden, 0 dan baslayip 2 uzeri 32 de biten (i386) RAM
    adres space'in bir parcasi. Islemcinin icinde bazi kutukler var. Siz bu
    kutuklerle nerenin stack, nerenin code, nerenin data olacagini tespit
    ediyorsunuz. Temelde bir den cok kod ve data bolgesi olabilirken stack
    uygulamaniz boyunca her zaman tek olur. Yani, sizin programinizin her
    yerinde stack ayni adreste/segmentte olurken, stack her zaman ayni
    yerdedir. 32 Bitlik bir sistemde segmentasyon virtualdir, yani sizin
    kodunuz segmentler degil, duz bir 32 Bitlik adres alani gorur. Bu adres
    alanini kendi istedigi gibi stack, data ve kod icin kullanir.

    Bir fonksiyonun degiskenlerinin, yani "int a;", "char *b" gibi tarif
    edilen degiskenlerinin stack'a konmasinin sebebi, return komutuyla
    stack'tan cikilirken orada bulunan geri donus adresi alinmadan once
    stack adresinin fonksiyon cagrilmadan onceki orijinal haline donmesidir.
    Yani, return komutuyla birlikte, yerel degiskenlerinizin hafizada
    kapladigi yer serbest kalir.

    Stack ozel bir bellek bolgesidir. Daha cok derleyicinin kullanmasi icin
    vardir. Sizin ayirdiginiz bellek bolgeleri her zaman data segmentlerinde
    olur.

    Simdi sorunuza donelim.

    str bir degisken. Bunu aslen birebir bir unsigned int gibi
    dusunebilirsiniz. Ama degiskenin icerigi bir sayidan ziyade bir adres
    olarak yorumlanir. Tipik bir & operandi, size bir degiskenin adresini
    dondurur. Bu bir referanstir, bir pointer degil.

    Demekki sizin yonteminiz sizin istediginizi yerine getiriyor.

    Saygi ve sevgiler..


  • Next message: msakarya@infotech.com.tr: "[linux-programlama] php"

    ---------

    Bu arsiv hypermail 2.1.6 tarafindan uretilmistir.