char table[1000][1000];
reserves million bytes from stack and sets name "table" to point to it as 2D array that has 1000 char per row.
char table[0][1000] = '#';
makes no sense at all.
If "table" represents a 2D array, then the type of "table[0]" is a pointer, but elements within the array are referenced "table[y][x]".