Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > p=(char *)malloc((sizeof(float))["\000\006\010\013\015\100"])

Reply
Thread Tools

p=(char *)malloc((sizeof(float))["\000\006\010\013\015\100"])

 
 
fuzhen
Guest
Posts: n/a
 
      06-11-2008
what's this?
 
Reply With Quote
 
 
 
 
MisterE
Guest
Posts: n/a
 
      06-11-2008


> Is that sufficiently simple for you? (Remember to replace 11 with a
> different
> value from the array if sizeof(float) doesn't happen to be 3 on your
> system.)


Does something like this have a legitimate use at all?


 
Reply With Quote
 
 
 
 
Chris Dollin
Guest
Posts: n/a
 
      06-11-2008
MisterE wrote:

>
>
>> Is that sufficiently simple for you? (Remember to replace 11 with a
>> different
>> value from the array if sizeof(float) doesn't happen to be 3 on your
>> system.)

>
> Does something like this have a legitimate use at all?


/Something/ like this, yes, depending on how close a similarity
you insist on. `malloc` is, after all, a useful function.

--
"Never ask that question!" /Babylon 5/

Hewlett-Packard Limited Cain Road, Bracknell, registered no:
registered office: Berks RG12 1HN 690597 England

 
Reply With Quote
 
Øyvind Røtvold
Guest
Posts: n/a
 
      06-11-2008
"MisterE" <> writes:

>> Is that sufficiently simple for you? (Remember to replace 11 with a
>> different
>> value from the array if sizeof(float) doesn't happen to be 3 on your
>> system.)

>
> Does something like this have a legitimate use at all?


This may save you a couple of bytes.

Making it more readable by placing the table as a static before the
call would probably not cost you any bytes, this would, however only
work if this is used where you can have declarations, otherwise eg. in
a macro, this may be a solution.

The numbers look odd though, appearently only size 1 to 4 produces
sensible values, what's the context here?

--
... __o Øyvind
... _`\(, http://www.darkside.no/olr/
... (_)/(_) ... biciclare necesse est ...
 
Reply With Quote
 
Sjouke Burry
Guest
Posts: n/a
 
      06-11-2008
fuzhen wrote:
> what's this?

Doodles from a sick programmer.
 
Reply With Quote
 
Serve Lau
Guest
Posts: n/a
 
      06-11-2008

"fuzhen" <> schreef in bericht
news:b4f91191-dafe-4a63-84a7-...
> what's this?


in what context was this used?

 
Reply With Quote
 
rahul
Guest
Posts: n/a
 
      06-12-2008
On Jun 11, 4:30 pm, Richard Heathfield <r...@see.sig.invalid> wrote:
> fuzhen said:
>
> > what's this?

>
> Checking the subject line, I guess you are referring to this:
>
> p=(char *)malloc((sizeof(float))["\000\006\010\013\015\100"])
>
> to which the answer is that it's a badly written call to malloc. But, given
> suitable furniture (a function wrapped around it, <stdlib.h>, etc - and a
> semicolon wouldn't go amiss at the end there), it's perfectly legal, provided
> sizeof(float) doesn't exceed 6 on the target system. On systems where it
> does, the behaviour is undefined.
>
> Let's start off by assuming sizeof(float) is 3 - which is a perfectly legal
> value for sizeof(float), and has the merit of being a little unlikely, to say
> the least.
>
> Thus, given that assumption, the code reduces to:
>
> p=(char *)malloc((3)["\000\006\010\013\015\100"])
>
> and (3) is just 3, so that gives us:
>
> p=(char *)malloc(3["\000\006\010\013\015\100"])
>
> Now, a[i] and *(a + i) are guaranteed to be equivalent, so let's do some
> substituting:
>
> p=(char *)malloc(*(3+"\000\006\010\013\015\100"))
>
> Okay, x+y is the same as y+x, so:
>
> p=(char *)malloc(*("\000\006\010\013\015\100"+3))
>
> and *(a + i) is the same as a[i], so:
>
> p=(char *)malloc("\000\006\010\013\015\100"[3])
>
> Now, "\000\006\010\013\015\100" is an array with values { 0, 6, 8, 11, 13, 64,
> 0 }, so "\000\006\010\013\015\100"[3] is element 3 of that array: element 0
> is 0, element 1 is 6, element 2 is 8, element 3 is 11. So we can substitute
> that back in again:
>
> p=(char *)malloc(11)
>
> and finally we can lose the spurious and utterly pointless cast, which gives:
>
> p = malloc(11)
>
> Is that sufficiently simple for you? (Remember to replace 11 with a different
> value from the array if sizeof(float) doesn't happen to be 3 on your system.)
>
> --
> Richard Heathfield <http://www.cpax.org.uk>
> Email: -http://www. +rjh@
> Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
> "Usenet is a strange place" - dmr 29 July 1999


This is the first time I am seeing array literals declared in this
manner. This is a new addition in C99, isn't it? And this cryptic
thing is supposed to pass array literals ( just to quote one of the
possible scenarios).
 
Reply With Quote
 
Peter Nilsson
Guest
Posts: n/a
 
      06-12-2008
rahul wrote:
> Richard Heathfield <r...@see.sig.invalid> wrote:
> > Checking the subject line, I guess you are referring to this:
> >
> > p=(char *)malloc((sizeof(float))["\000\006\010\013\015\100"])

<snip>
>
> This is the first time I am seeing array literals declared in this
> manner. This is a new addition in C99, isn't it?


No. Neither string literals nor a[i] == i[a] is new.

--
Peter
 
Reply With Quote
 
rahul
Guest
Posts: n/a
 
      06-12-2008
On Jun 12, 10:07 am, Peter Nilsson <ai...@acay.com.au> wrote:
> rahul wrote:
> > Richard Heathfield <r...@see.sig.invalid> wrote:
> > > Checking the subject line, I guess you are referring to this:

>
> > > p=(char *)malloc((sizeof(float))["\000\006\010\013\015\100"])

> <snip>
>
> > This is the first time I am seeing array literals declared in this
> > manner. This is a new addition in C99, isn't it?

>
> No. Neither string literals nor a[i] == i[a] is new.
>
> --
> Peter


Thanks Peter,
I missed that part in the FAQ. I got my answer.
char *a = "hello";
printf ("%c", 2[a]);
The above snippet directly does
printf ("%c", 2["hello"]);

a[i] == i[a]. Hey...I knew that
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57