I'm with Mark, Richard, and Chris on this. Aside from Mr Dionne's
rather confused comments, this thread appears to hang largely on the
question of how strictly one defines the term "pass by reference".
You appear to hold that it covers any "technique" whereby a
"reference" to a variable is passed. I'd call that, at best,
"passing a reference" (where in this context "reference" is an
informal, and not very useful, term for "pointer to an object of the
appropriate type").
I agree with Chris (or what I take to be the main point of one of his
posts in this thread): "pass by reference" is more usefully defined
specifically as a syntactic feature of a language. And C does not
have that syntactic feature.
Ok, I think we're all in agreement about what the built-in features of
the C language are (pass-by-value, no pass-by-reference), and about
the usefulness of a certain technique that can be implemented using
lower-level language features (passing a pointer so the called
function can modify the object that it points to, or just to avoid
unnecessarily copying the entire object). (All of us with the
possible exception of Mr. Dionne; he has so far failed to make clear
just what he thinks.)
Now we're down to a question of terminology. The standard doesn't
provide a term for this technique, so we have to fall back to general
programming jargon or plain English.
Someone who programs both in C and in other languages needs to
understand that passing a pointer is the way to implement what can be
done with a built-in feature in certain other languages. Someone who
programs only in C should still have some understanding of programming
in general, particularly of the very common programming technique of
passing an argument to a function in a way that doesn't copy the value
of the argument and that allows the function to modify a specified
object. We need to understand how this technique is implemented in
terms of C pointers being passed by value (copied) into the function,
but it's not useful to ignore the existence of the technique and talk
only about the lower-level constructs used to implement it, any more
than it would be useful to talk only about pointers and structures in
a program that implements a linked list.
Here are a couple of questions for those of you who insist that the
term "pass by reference" should apply only to a built-in language
feature:
What do you call the corresponding programming technique? (Ideally,
I'd like to see a pity and language-independent term, just as we use
the term "linked list" regardless of the implementation language.)
If some other language, say C+++ (sic), had built-in support for
linked lists, would you insist on not using the term "linked list" in
the context of a C program?