UMBC CS 201, Fall 06
UMBC CMSC 201
Fall '06

CSEE | 201 | 201 F'06 | lectures | news | help

Even More Good News About
Arrays as Parameters

What gets passed to the function?

The address of the base of the array.

So what?

There is a BIG difference between passing values, which we have been doing up until now, and passing addresses.

Ben and his programmers didn't use the array that way.
But consider this sample program that exploits this behavior.

The Program

/*************************************************\ 
*  Filename: passing.c                            *
*  Author:   Sue Bogar                            *
*  Date Written: Spring 97			  *
*  Section: 101                                   *
*  EMail: bogar@cs.umbc.edu                       *
*  Modified: 2/25/98 by the author.	          *
*                                                 *
*  This program was designed to show an example   *
*  of passing an array to a function              *
\*************************************************/

#include <stdio.h>

#define  SIZE  10

/* Example prototype of a function that takes 
an array as an argument.  NOTE: the empty 
square brackets.  You can optionally put the 
size within the brackets. */

void Cubes(int cubes[], int numElems);

int main ( ) 
{
   int array[SIZE], i ;

   /* Assign each element the value of
   the index squared */
   for (i = 0; i < SIZE; i++)
   {
      array[i] = i * i ;
   }

   /* Print the values of the elements */
   for (i = 0; i < SIZE; i++)
   {
      printf("array[%d] = %d\n", i, array[i]) ;
   }
   printf("\n") ;

   /* Example of a function call. NOTE: only the
   name of the array is passed (the address) */
   Cubes(array, SIZE) ;

   /* Print the values of the elements */
   for (i = 0; i < SIZE; i++)
   {
      printf("array[%d] = %d\n", i, array[i]) ;
   }
   printf("\n") ;

   return 0;
}


/********************************************
* Function : Cubes
*
* Cubes replaces each of the elements in the
* array passed in with the cube of the index.
*
* Input: an array of ints (cubes)
*        the size of the array (numElems)
* Output: there is no return value.
********************************************/
void Cubes(int cubes[], int numElems) 
{
  int i ;

  /* Assign each element the value of the
  index cubed */
  for (i = 0; i < numElems; i++)
  {
     cubes[i] = i * i * i ;
  }
}

The Sample Run



array[0] = 0
array[1] = 1
array[2] = 4
array[3] = 9
array[4] = 16
array[5] = 25
array[6] = 36
array[7] = 49
array[8] = 64
array[9] = 81

array[0] = 0
array[1] = 1
array[2] = 8
array[3] = 27
array[4] = 64
array[5] = 125
array[6] = 216
array[7] = 343
array[8] = 512
array[9] = 729

Another Example

/***********************************
 ** File: addingarrays.c
 ** Author: D. Frey
 ** Date: 2/9/00
 ** Section: 303
 ** EMail: frey@cs.umbc.edu
 ** Modified by: Sue Evans
 ** Mod. Date: 2/21/04
 **
 **     This program is an example of
 ** passing arrays to functions.
 **
 ** An array of even integers and an array
 ** of odd integers are displayed and the
 ** sum of the corresponding elements is
 ** calculated and displayed
 **
 ***********************************/

#include <stdio.h>

/* number of elements in each array */
#define NUM_ELEMENTS 5

/* function prototypes */
void PrintArray (int array[], int size);
void AddArrays  (int array1[], int array2[], 
                 int totals[], int size);

int main ( )
{
   /* initializing arrays */
   int evens [NUM_ELEMENTS]  = {2, 8, 12, 14, -4};
   int odds  [NUM_ELEMENTS]  = {3, 5, 7, 9, 17};

   /* initializes all of the elements to 0
   CAUTION: This ONLY WORKS FOR 0 */
   int total [NUM_ELEMENTS]  = {0};

   /* a few blank lines if you please */
   printf ("\n\n");

   /* display the even integer array */
   printf ("Evens:");
   printf ("\t");
   PrintArray (evens, NUM_ELEMENTS);

   /* display the odd integer array */
   printf ("Odds:");
   printf ("\t");
   PrintArray (odds, NUM_ELEMENTS);

   /* add the corresponding elements of the arrays */
   AddArrays (evens, odds, total, NUM_ELEMENTS);

   /* display the totals array */
   printf ("Totals:");
   printf ("\t");
   PrintArray (total, NUM_ELEMENTS);
   printf ("\n\n");

   return 0;
}

/***********************************
 ** Function: PrintArray()
 **
 ** PrintArray() displays the elements of an
 ** integer array on one line
 **
 **  Input: an integer array and
 **         the number of elements in the array
 ** Output: there is no return value
 ***********************************/

void PrintArray (int array[], int size)
{
   int i;
   
   for (i = 0; i < size; i++)
   {
      printf ("%4d", array[i]);
   }
   printf ("\n");
}

/*********************************** 
 ** Function: AddArrays
 ** 
 ** AddArrays() adds the elements with the
 ** same index of array1 & array2 and stores 
 ** their sum in the array, totals, at that
 ** index.  Although nothing is returned, the
 ** array, totals, passed in is modified by
 ** the function to hold the sums described
 ** above.
 **
 ** Inputs: 2 integer arrays to be added,
 **         an integer array to hold the result
 **         & the size of all arrays
 ** Output: there is no return value
 ** Assumptions:  all arrays are the same size
 ***********************************/

void AddArrays (int array1[], int array2[],
                int totals[], int size)
{
   int i;

   for (i = 0; i < size; i++)
   {
      totals[i] = array1[i] + array2[i];
   }
}

Sample Output

linux1[108] % a.out


Evens:     2   8  12  14  -4
Odds:      3   5   7   9  17
Totals:    5  13  19  23  13

Last Modified - Tuesday, 22-Aug-2006 07:13:58 EDT


CSEE | 201 | 201 F'06 | lectures | news | help