C Returning Arrays from Functions

C Arrays

C language does not allow returning a complete array as a function parameter. However, you can return a pointer to an array by specifying the array name without an index. We will discuss pointers in the next chapter. You can skip this chapter for now, and come back to study 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 that returns a pointer, as follows:

int * myFunction() { . . . }

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

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

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; } /*The main function to call the function defined above*/ int main () { /*A 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 results:

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

other extensions