[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Lies in education [was Re: The "loop and a half"]

bartc wrote:
> The original has an extra pointer so idiomatic C might be more:
>     tokenrec ***

I was going by your English description, which when translated
into C gives only two pointers.

But I think you're right that the C version really has 3 levels
of indirection, so the meaning of "array" in the original
language must be something different from what it is in C.

My point was that C makes very little distinction between
"pointer to foo" and "pointer to first element of array
of foo", so it's not usual practice to write declarations
as convoluted as "* (*)[]".

> If you want to lose all array information, and really don't care if 
> you're dealing with a pointer, or an array (and don't mind changing how 
> such a value is passed, and how it is accessed) then this is fine for you.

You lose that information in C anyway. There's no way for the
function to tell whether it was passed a pointer to a single
value or a pointer to an array, and if the latter, how many
elements are in the array. If you want that information passed,
you have to arrange it separately. You don't get it just by
writing "* (*)[]" instead of "***" for the argument type.