Article View: be.comp.programming
Article #13135Re: C: Pointer + variabele
From: Roel Schroeven
Date: Sat, 01 Sep 2001 00:25
Date: Sat, 01 Sep 2001 00:25
68 lines
3602 bytes
3602 bytes
In article <3b900372.53396580@news.pandora.be>, "a183824" <erno@freegates.be> wrote: > On Fri, 31 Aug 2001 21:32:40 GMT, erno@freegates.be (a183824) wrote: > >>Oeps: is nog altijd niet goed: >> >>Voor de geinterresseerden: het volgende compileert goed: >> >> TypePointer += * (INT8U*) (&TypFixSize) + type; > > Dit compileert als volgt: > lees de inhoud van locatie TypFixSize (raar, want & zou toch moeten > aangeven dat het om het address gaat). Tel hierby de waarde van type op. > Lees die locatie, en tel dat bij. Maar ik moet niet de inhoud van > TypFixSize hebben, maar de inhoud van (TypFixSize + offset bepaald door > type). Aha, leuke opgave, I like this kind of stuff :) Alleen weet ik niet helemaal waar je juist naartoe wil, en je volledige uitleg in de originele post is me wat te lang en te verwarrend. 'k Zal eerst eens uitleggen waarom hij doet wat hij doet. Omwille van operator precedence regels komt het rechterlid overeen met (* (INT8U*) (&TypFixSize) ) + type M.a.w. neem het adres van TypFixSize, beschouw dat adres als een pointer naar INT8U, en pak de waarde waar die pointer naar wijst. Tel daar de waarde van type bij op. (m.a.w. wat jij hierboven beschrijft). Als ik het goed begrijp, wil jij die offset waar je het over hebt in bytes hebben. Pointer arithmetic in C is zo opgevat dat de offset niet in bytes is, maar in sizeof van het type waar de pointer naar wijst. Als je dus in bytes wil rekenen, moet dat type een byte groot zijn, of moet je het ernaar converteren, en ook weer terugconverteren naar het oorspronkelijke type voor je de waarde ervan pakt. Dus: TypePointer += * ((oorspronkelijk type) (((INT8U*)&TypFixSize) + type)); Ik weet niet welk type TypFixSize; 't lijkt me het meest logische als dat INT8U is, en dat maakt de zaken er wat duidelijker op: TypePointer += *(&TypFixSize + type); of: TypePointer += (&TypFixSize)[type]; (of ook TypePointer += type[&TypFixSize]; (echt waar) maar dat maakt de zaken er niet duidelijker op) Je kan eventueel ook een pointer naar TypFixSize maken om het gemakkelijker te maken: INT8U* p = (INT8U*)&TypFixSize; /* cast niet nodig als TypFixSize idd van type INT8U is */ en dan TypePointer += p + type; of TypePointer += p[type]; -- Roel Schroeven x3jmyi0yrrn3h001@sneakemail.com (anti-spam email address from sneakemail.com) "Don't blame me if there are bugs. Blame the cute, furry one." - Rusty Russell
Technical Details
Message-ID:
<20010901.022541.1670925541.1853@miro.localdomain>Path:
arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mailReferences:
<3b8ff156.48759893@news.pandora.be> <3b900198.52921787@news.pandora.be> <3b900372.53396580@news.pandora.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,f044043a7de404b0 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2001-08-31 17:50:09 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!sn-xit-02!supernews.com!news.tele.dk!small.news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail From: "Roel Schroeven" <x3jmyi0yrrn3h001@sneakemail.com> Subject: Re: C: Pointer + variabele Newsgroups: be.comp.programming Message-ID: <20010901.022541.1670925541.1853@miro.localdomain> References: <3b8ff156.48759893@news.pandora.be> <3b900198.52921787@news.pandora.be> <3b900372.53396580@news.pandora.be> User-Agent: Pan/0.9.6 (Unix) Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Lines: 68 Date: Sat, 01 Sep 2001 00:25:43 GMT NNTP-Posting-Host: 213.224.134.153 X-Complaints-To: abuse@pandora.be X-Trace: afrodite.telenet-ops.be 999303943 213.224.134.153 (Sat, 01 Sep 2001 02:25:43 MET DST) NNTP-Posting-Date: Sat, 01 Sep 2001 02:25:43 MET DST Organization: Telenet Internet