On 2014-02-24, Michael Torrie <[email protected]> wrote:
> On 02/24/2014 11:05 AM, [email protected] wrote:
>> typedef struct {
>> int value;
>> } Number;
>>
>> Number *o;
>> o = malloc(sizeof(*o));
>> o->value=3;
>> printf("o<%p>, o->value<%p>\n", o, &o->value);
>>
>> o<0x9fe5008>, o->value<0x9fe5008>
>>
>> Is the compiler borked?
>
> Why would you think that? The address of the start of your malloc'ed
> structure is the same as the address of the first element. Surely
> this is logical?
Not only is it logical, the C standard explicitly requires it. Here's
a second-hand citation since I don't happend to have an actual copy of
the standard on hand:
C1x ยง6.7.2.1.13:
A pointer to a structure object, suitably converted, points to
its initial member ... and vice versa. There may be unnamed
padding within a structure object, but not at its beginning.
--
Grant Edwards grant.b.edwards Yow! I'm gliding over a
at NUCLEAR WASTE DUMP near
gmail.com ATLANTA, Georgia!!
--
https://mail.python.org/mailman/listinfo/python-list