Liste des Groupes | Revenir à cl c |
On 10/07/2024 19:39, Michael S wrote:
>On Wed, 10 Jul 2024 18:30:54 +0100>
bart <bc@freeuk.com> wrote:
>On 10/07/2024 16:48, Tim Rentsch wrote:>
>bart <bc@freeuk.com> writes:>
>>>> I earlier asked this:
>"So if arrays aren't passed by value in C, and they aren't passed>
by reference, then how the hell ARE they passed?!"
They aren't. C allows lots of things to be passed as an argument
to a function: several varieties of numeric values, structs,
unions, and pointers, including both pointers to object types and
pointers to function types. C does not have a way for a function
to take an argument that is either an array or a function. There
is a way to take pointers to those things, but not the things
themselves. Arrays and functions are second-class values in C.
That's a good point. It's not just arrays that can't be passed by
value (because the language says so) but also functions (because its
not meaningful).
>
Yet, although pointers to arrays and function can be passed (without
even doing anything special like using &), you are not allowed to say
that anything is passed by reference in C!
>
The automatic conversion to a pointer, which is also a feature of
true pass-by-reference, doesn't count.
>
Not needing an explicit deref inside the callee (another
characteristic of pass-by-reference) doesn't count either.
It does not count, because automatic conversion to a pointer is not
something that happens only during parameter passing. For arrays, it
happens in all contexts except sizeof(). For functions, it happens in
all contexts except function call. Or, may be, including function call,
in this case (but not in case of arrays) it depends on point of view.
Suppose that was to happen in all contexts, not just for arrays and
functions, but for all types.
>
That means that if A, B, C were numbers, then any call such as F(A, B,
C) would pass the addresses of the numbers rather than their values.
>
According to what people have said, C would STILL be a language that
passed thing by value, and never by automatic reference.
Les messages affichés proviennent d'usenet.