On Wed, 22 Jun 2016 11:15:44 +0200, Edward Bartolo wrote:
> I learnt arrays are always passed by reference to function calls. So,

KatolaZ already posted a very clear and correct comment 
regarding by-reference vs. by-value, but anyway: 

It is a fact that there are no *references* in C, but only 
values.  However, such values can very well be pointers 
*referring* to objects.  I suspect that missing that 
apparently small but nevertheless _extremely_ important 
difference in semantics may have lead to the misconception.

> I wrote the following program to make use of this so that a variable
> in main() is modified in a function call.
> 
> Is this technique used?
> 
> The program:
> --------------------------
> #include <stdio.h>
> 
> void times2(int i[]) {

Note that "int i[]" and "int *i" are synonymous — despite 
the difference in syntax they have absolutely identical 
meaning. The bracket notation conventionally is not used 
very often. Sometimes it is used as an explicit hint to the 
reader that the value to be passed is not only a pointer, 
but a pointer to the first element of an array. Compare: 
     int main( int argc, char **argv )
vs.
     int main( int argc, char *argv[] )

Both lines have identical meaning, but the second form gives 
away some supplementary information to the human(!) reader.


>   i[0] = 33;

The array bracket notation in C is nothing but syntactic 
sugar covering up the fact that array subscription is just 
plain old pointer arithmetic: 

   arr[idx]  <==>  *(arr+idx)

Consequently, your line above is identical to (and in your 
example program better be written as): 
    *i = 33;


Conclusion: While your code wasn't exactly wrong, it could 
have been slightly confusing to the unsuspecting reader.

HTH, Regards
Urban
_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to