«Дункан» - это строка с нулевым символом в конце и как таковой массив char ({'D', 'u', 'n', 'c', 'a', 'n', '\0'}
). char*name="Duncan";
устанавливает имя в адрес массива.
С вашим утверждением все в порядке в C, но в C ++ "Duncan" является массивом const char, поэтому вы должны использовать const char *name = "Duncan"
.
Кстати, если вам не нужно менять имя переменной указателя, лучше иметь const char name[] = "Duncan"
. Это только выделяет память для строки. Ваш пример кода выделяет память для строки и для имени переменной указателя. (Конечно, компилятор может оптимизировать отсутствующее имя.)