#include <stdio.h> void testit(int[]); int main(void) { int i[] = {1,2,3,4,5}; printf("Before testit(), i[0]=%d\n", i[0]); testit(i); printf("After testit(), i[0]=%d\n", i[0]); return 0; } void testit(int in[]) { printf("Within testit(), upon entering, in[0]=%d\n", in[0]); in[0] = 11; printf("Within testit(), before leaving, in[0]=%d\n", in[0]); }You would not be faulted for guessing
Before testit(), i[0]=1 Within testit(), upon entering, i[0]=1 Within testit(), before leaving, i[0]=11 After testit(), i[0]=1as was the case for passing in a single scalar value by value. However, what it actually produces is
Before testit(), i[0]=1 Within testit(), upon entering, i[0]=1 Within testit(), before leaving, i[0]=11 After testit(), i[0]=11which is analagous to what happens when passing in a variable through a pointer. The reason for this is that arrays, at a fundamental level, are passed in through pointers; the preceding program is equivalent to
#include <stdio.h> void testit(int *); int main(void) { int i[] = {1,2,3,4,5}; printf("Before testit(), i[0]=%d\n", i[0]); testit(&i[0]); printf("After testit(), i[0]=%d\n", i[0]); return 0; } void testit(int *in) { printf("Within testit(), upon entering, in[0]=%d\n", in[0]); in[0] = 11; printf("Within testit(), before leaving, in[0]=%d\n", in[0]); }Thus, essentially what is being passed in is the address of the zeroth member of the array.
Here's another example of a routine that just prints out the values of the array passed in:
#include <stdio.h> void printit(int[]); int main(void) { int i[] = {1,2,3,4,5}; printit(i); return 0; } void printit(int in[]) { int i; for(i=0; i<5; i++) { printf("in[%d]=%d\n", i, in[i]); } }written more explicitly using pointers:
#include <stdio.h> void printit(int *); int main(void) { int i[] = {1,2,3,4,5}; printit(&i[0]); return 0; } void printit(int *in) { int i; for(i=0; i<5; i++) { printf("in[%d]=%d\n", i, *in); in = in + 1; } }Note here the use of in = in + 1 to move the pointer to the next address location, enabling us to access the next array element.