To initialize the array, as in, have the compiler set all the values when the variable is created, there is only one way:
int matrix[x][y] =
{
{1,1},
{1,1}
};
However, there is a special rule in C allowing you to set every array item to zero, just by typing:
int matrix[x][y] = { 0 };
This one works with zeroes, if you try with any other value, only the first item of the array gets set.
Then of course there are various ways to set the items of the array in runtime, as shown in other answers, but that is assignment not initialization.
EDIT :
Note that the above is only true for "traditional", statically allocated arrays. If you are using the array declaration feature called "variable length arrays", you can only set its values in runtme.
A variable length array (vla) is an array that can have its bounds determined in runtime. In the original question, the array length was determined by the non-constant variables x and y, in runtime. Since the array length was determined in runtime, all initialization has to be done in runtime as well (with memset() etc).
Please note that vla is only available in the newer C standards C99 and C11!
c multidimensional array initializationin google.