It's more easily done with perl:
perl -0777 -pi -e 's{/\*.*?\*/}{/* new comment */}s' file.c
Would replace the first occurrence of /*...*/ with the new comment.
sed processes the text one line at a time, so you can't match a multi-line text, unless you do add the other lines to the pattern space (or you use -z with recent versions of GUN sed):
sed -zi 's|/\*.*\*/|/* new comment */|' file.c
Or portably (assuming short files):
sed -e :1 -e '$!{N;b1' -e '}' -e 's|/\*.*\*/|/* new comment */|' file.c
However note that since sed doesn't support the *? non-greedy operator of perl, that means that it will match from the first occurrence of /* to the last occurrence of */, so it would replace /* comment 1 */ some C code /* comment 2 */ with /* new comment */.
Doing it with sed is possible but more painful. See here for an example (that also takes care of avoiding /* occurrences inside "strings" and a few other caveats).
A simplified solution that would be the equivalent of that perl one would be something like:
sed '
# load the whole file into the pattern space
:1
$!{
N;b1
}
s/_/_u/g;s/>/_c/g; # use _ as an escape character to escape
# the > we will be using in place of */
s|\*/|>|g; # replace */ with >
s|/\*[^>]*>|/* new comment */|
s|>|*/|g; # undo the replacement and escaping
s/>/_c/g;s/_u/_/g' file.c
With GNU awk, you could do:
awk -v RS='\\*/' '
!found && sub(/\/\*.*/, "/* new comment ") {found = 1}
{printf "%s", $0 RT}' file.c