Ну, во-первых, если вы хотите изменить его.
Представьте себе следующую надуманную функцию:
int getNextCharAndCount (char *pCh);
Каждый раз, когда вы вызываете его, он возвращает следующий наиболее часто встречающийся символ из списка, возвращая счетчик из функции и устанавливая символ с помощью указателя символов.
Мне трудно найти другой вариант использования, в котором указатель потребовался бы, если бы вы только хотели использовать (но не изменить) базовый символ. Это не значит, что никого не существует, конечно: -)
Кроме того, я не уверен, что вы обсуждаете глубокую / мелкую копию. Это имеет тенденцию применяться к структурам с указателями, где поверхностная копия просто дублирует верхний уровень, а глубокая копия создает копии всех уровней.
То, что вы имеете в виду, это передача по значению и передача по ссылке.