Subject: Re: iconv(3) prototype
To: Alan Barrett <apb@cequrux.com>
From: Andrew Brown <atatat@atatdot.net>
List: tech-userlevel
Date: 07/29/2004 00:17:02
On Wed, Jul 28, 2004 at 04:48:48PM +0200, Alan Barrett wrote:
>On Wed, 28 Jul 2004, Andrew Brown wrote:
>> if i understand this properly (seebs?), it's like this:
>>
>> "const char **" is a pointer to a constant pointer to a character.
>> "char * const*" is a pointer to a pointer to a constant character.
>> the former is in the prototype. the latter is the type end up with
>> when you take the address of x, where x is a "const char *".
>
>You have that almost exactly backwards. Perhaps you should use cdecl?
>
>cdecl> explain const char ** x;
>declare x as pointer to pointer to const char
>cdecl> explain char * const * x;
>declare x as pointer to const pointer to char
>cdecl> explain char ** const x;
>declare x as const pointer to pointer to char
okay, then i was right the first time when i said to myself that i
shouldn't speak up because i was probably confusing myself.
thanks. :)
suffice it to say that you can't pass "&x" to a function that expects
"const char **", where x is a "char *". ah...that's where the
confusing "char * const *" type pops up, which has const in the wrong
place (ie, the requisite one can be added, but the other can't be
removed).
--
|-----< "CODE WARRIOR" >-----|
codewarrior@daemon.org * "ah! i see you have the internet
twofsonet@graffiti.com (Andrew Brown) that goes *ping*!"
werdna@squooshy.com * "information is power -- share the wealth."