Below is an example of passing a statically declared array, to a function. All arguments are passed by value to the function. However, becasue the value of the array name argument is the base address of the array argument, the parameter refers to the same array buckets as the argument. Thus, the function can modify the bucket values in the passed array, whereas it cannot modify any values of the struct or int arguments.

After the example code is a drawing of the stack right before the return from kooky.

The program:

  #include <stdio.h>
  #include <string.h>

  // a function prototype:
  void kooky(int a[], int n);

  /**********************************************************
   * main function:
   */
  int main() {

  	int x, i;
  	int arr[5];

  	for(i=0; i < 5; i++) {
  	   arr[i] = i;
  	}
  	for(i=0; i < 5; i++) {
  	   printf("arr[%d] = %d\n", i, arr[i]);  // bucket values: 0 1 2 3 4 
  	}
  
  	kooky(arr, 5);   // array argument: passes value of base address of array
  
  	for(i=0; i < 5; i++) {
  	   printf("arr[%d] = %d\n", i, arr[i]);   // bucket values: 0 1 4 9 16
  	}
  }
  /**********************************************************
   * kooky function definition:  what does this function do?
   *   a: an array of int values
   *   n: size of the array
   */
  void kooky(int a[], int n) {
  	int i;
  
  	for(i=0; i < n; i++) {
  	   a[i] = a[i]*a[i];
  	}
  	//**** THE STACK IS DRAWN RIGHT BEFORE THE return STATMENT IS EXECUTED
  	return;
  }
  /**********************************************************/
The stack right before kooky returns:

                |===========================================|   
kooky:          |         -------                           |
                |       i |  5  |                           |
                |         -------                           | 
                |         -------                           |  
                |      n  |  5  |                           | 
                |         -------                           |
                |        ---------                          |
                |      a |   *   |                          |
                |        ----|----                          |
                |============|==============================|
      main:     |            |                              |
                |            |                              | 
                |            |                              | 
                |            |                              | 
                |            \/                             |
                |            -----------------------        |
                |        arr | 0 | 1 |  4 | 9 | 16 |        |
                |            -----------------------        |
                |            -------                        |
                |          x | 10  |                        |
                |            -------                        |
                |            -------                        |
                |          i |  5  |                        |
                |            -------                        | 
                |===========================================| 
                                  STACK