You could use the `maparg()` function.

To test if the user mapped something to `<C-c>` in normal mode, you would write:

    if !empty(maparg('<C-c>', 'n'))

If the user mapped something, to store the `{rhs}` in a variable, you would write:

    let C-c_rhs_save = maparg('<C-c>', 'n')

If you want to have more information about the mapping, like:

 - is it silent?
 - is it buffer-local?
 - does it use the `<expr>` argument?
 - ...

You could give a third and a fourth argument: `0` and `1`.  
`0` because you're looking for a mapping and not an abbreviation, and `1` because you want a dictionary with a maximum of information and not just the `{rhs}` value:

    maparg('<C-c>', 'n', 0, 1)

----------

To restore the mapping, you would write:

	exe 'nnoremap <C-c> ' . C-c_rhs_save