How to declare and use huge arrays of 1 billion integers in C?

Michael is right, you can't fit that much on the stack. However, you can make it global (or static) if you don't want to malloc it.

#include <stdlib.h>
#include <time.h>
#define N 1000000000
static int list[N];

int main(int argc, char **argv)
{
  size_t i;
  srand(time(NULL));
  for(i=0; i<N; i++)
     list[i] = rand()%1000;
  return 0;
}

You must use malloc for this sort of allocation. That much on the stack will fail nearly every time.

int *list;

list = malloc(N * sizeof(int));

This puts the allocation on the heap where there is a lot more memory available.