FIFO queue for a 2D array in ANSI C, version 2
Good formatting
Good use of (u)intN_t types
When printing, use a matching format specifier: printf(&quot;%&quot; PRI16u , array_print[0]);
Avoid naked magic numbers
Define constants for flexibility and clarity
// int user_num[5] = { 0] };
//uint16_t big_array[10][5] = { 0 };

#define BIG_ARRAY_MAXJ 10
#define BIG_ARRAY_MAXI 5
int user_num[BIG_ARRAY_MAXI] = { 0 };
uint16_t big_array[BIG_ARRAY_MAXJ][BIG_ARRAY_MAXI] = { 0 };

Instead of 9, use BIG_ARRAY_MAXJ - 1, etc.
To address the &quot;I could have put macros down to name 5 and 10 but I didn't see how that could be advantageous,&quot; comment: using named constants convey to others, including yourself at a later time, the relationship amongst the many constants and their individual meaning.
Global objects
Typically, it is far better to code for use of local objects than global ones.
Instead of
random_num_input(void)

Pass in a pointer to the array and its dimensions.  If VLA is supported:
random_num_input(int jn, int in, uint16_t a[j][i]) {
  for (int j = 0; j &lt; jn; j++) {
    for (int i = 0; i &lt; in; i++) {
        a[j][i] = rand() % 256;
    }
}

Array indexing
For big arrays, consider size_t instead of int to well handle large arrays.  size_t is the Goldilocks size for array sizing and indexing: not too small, not too big.
For big arrays, likely also need to move to allocated memory rather than fixed sizes.
Comment/code off by 1.
rand() % 255 forms values [0...254], not [0...255].
// stores random numbers between 0-255 into big_array ...
        big_array[j][i] = rand() % 255;

Consider
big_array[j][i] = rand() % 256;
// or 
big_array[j][i] = (uint8_t) rand();

Copying arrays
With arrays of the same dimension and type, as here, could use memcpy().
// for (int j = 0; j &lt; 10; j++) //
//    for (int i = 0; i &lt; 5; i++) {
//        big_array_copy[j][i] = big_array[j][i];
//    }
//}

// if known to be non-overlapping 
memcpy(big_array_copy, big_array, sizeof big_array_copy); 
// else 
memmove(big_array_copy, big_array, sizeof big_array_copy);

Minor: Tidier print
Consider not printing a trailing ','.  Little reason for a global array_print[].  Use the correct portable specifier
    char *sep = &quot;&quot;;
    for (int i = 0; i &lt; BIG_ARRAY_MAXI; i++) {
        printf(&quot;%s%&quot; PRI16u , sep, big_array_copy[j][i]);
        sep = &quot;,&quot;;
    }
    printf(&quot;\n&quot;);