Using 3x3 array to store your current board is ok. Using array to store possible winning combinations is NOT ok. Although this is your first program, it never hurts to start learning good habits. It is probably true that with this problem you can enumerate all possible combinations. However, what would you do if you wanted to code checkers? Number of possible winning scenarios are enormous. How about chess? There's not enough memory in all computers available today to store all possible winning moves for chess.
Much better approach is to write a function that will check those winning conditions for you. To make it simple, I recommend it writing like this. To not make it too simple, I will write that as pseudo-code:
// returns true if specified side won
// board - a pointer to your array
// player - specifies if you want to check if X or O is the winner
bool game_won(board, player)
{
For each row, check if each field is equal to player.
if yes return true.
For each column, check if each field is equal to player.
if yes return true.
Check if each field on diagonal is equal to player.
if yes return true.
// winning conditions not met, let's keep playing
return false
}
After player makes each move, you should call game_won() and it will check for you if that move make the player a winner.
p.s.
There are 8, not 10 possible winning moves for each player: 3 horizontal, 3 vertical and 2 diagonals.