Easy Tutorial
❮ C Exercise Example42 C Operators ❯

Returning Arrays from Functions in C

C Arrays

C does not allow returning an entire array as an argument from a function. However, you can return a pointer to an array by specifying the array's name without an index. We will cover pointers in the next chapter, so you can skip this chapter for now and come back to it after understanding the concept of C pointers.

If you want to return a one-dimensional array from a function, you must declare a function returning a pointer, like this:

int * myFunction()
{
    // Function body
}

Additionally, C does not support returning the address of a local variable outside the function, unless the local variable is defined as a static variable.

Now, let's look at the following function, which generates 10 random numbers and returns them using an array:

Example

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/* Function to generate and return random numbers */
int * getRandom()
{
  static int r[10];
  int i;

  /* Set the seed */
  srand((unsigned)time(NULL));
  for (i = 0; i < 10; ++i)
  {
     r[i] = rand();
     printf("r[%d] = %d\n", i, r[i]);
  }

  return r;
}

/* Main function to call the above defined function */
int main()
{
   /* Pointer to an integer */
   int *p;
   int i;

   p = getRandom();
   for (i = 0; i < 10; i++)
   {
       printf("*(p + %d) : %d\n", i, *(p + i));
   }

   return 0;
}

When the above code is compiled and executed, it produces the following result:

r[0] = 313959809
r[1] = 1759055877
r[2] = 1113101911
r[3] = 2133832223
r[4] = 2073354073
r[5] = 167288147
r[6] = 1827471542
r[7] = 834791014
r[8] = 1901409888
r[9] = 1990469526
*(p + 0) : 313959809
*(p + 1) : 1759055877
*(p + 2) : 1113101911
*(p + 3) : 2133832223
*(p + 4) : 2073354073
*(p + 5) : 167288147
*(p + 6) : 1827471542
*(p + 7) : 834791014
*(p + 8) : 1901409888
*(p + 9) : 1990469526

C Arrays

❮ C Exercise Example42 C Operators ❯