"Something"
по существу является коротким для:
static const char some_hidden_array[] = {'S', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g', '\0'};
some_hidden_array
То есть, когда вы пишете "Something"
, компилятор генерирует массив за кулисами и дает вам указатель на начало этого массив. Поскольку это уже указатель на символ, вам не составит никакого труда назначить его переменной «указатель на символ» (написанной как char*
).
10
- not для чего-либо подобного. Это всего лишь номер 10 - это не указатель на массив, содержащий число 10, или что-то в этом роде.
Обратите внимание, что char
является единственным символом , а не string, поэтому синтаксис строки необычен по сравнению с большинством других типов - строка несколько символов, а не только одна. Если вы попытаетесь использовать простой старый char
, вы увидите то же самое:
char *myChar = 'a'; // error
или для любого другого типа:
float *myFloat = 42.1f; // error
Другими словами, это не странно, что 10
дает ошибку - во всяком случае, странно, что "Something"
не . (По крайней мере, это странно, пока вы не знаете, как работают строковые литералы)