🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #13135

Re: C: Pointer + variabele

#13135
From: Roel Schroeven
Date: Sat, 01 Sep 2001 00:25
68 lines
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-mail
References: <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