On Fri, Jul 01, 2005 at 10:45:19AM +0200, Etienne Lorrain wrote:

>   The result of this funtion is 1, is there a C lawyer around?

The parameter is treated as unsigned* since an array is converted to
a pointer when passed through a function.

C99 says in 6.7.5.3:

   [#7] A declaration of a parameter as ``array of type'' shall
   be adjusted to ``qualified pointer to type'', where the type
   qualifiers (if any) are those specified within the [  and  ]
   of  the  array  type derivation.

> $ cat tmp.c
> unsigned fct (unsigned array[10])

These prototypes are all equivalent, and any sized array (or just a
plain pointer) can be passed to them:

    unsigned fct (unsigned array[10]);
    unsigned fct (unsigned array[]);
    unsigned fct (unsigned* array);

> {
>         return sizeof(array) / sizeof(array[0]);
> }

Therefore what you're testing is sizeof(unsigned*)/sizeof(unsigned)
which is 1 on x86 and most other 32-bit targets (but 2 on e.g. x86_64)

Hope that helps,

jon


Reply via email to