C нотация: указатель на массив символов (строка) - PullRequest
4 голосов
/ 18 мая 2011

Почему указатели на массивы char с (то есть. string с) записываются так:

char *path

Вместо:

char *path[]

или что-то в этом роде?

Как я могу создать указатель на char, а не string?

Ответы [ 3 ]

8 голосов
/ 18 мая 2011

char *path не указатель на строку, это указатель на char.

Возможно, char *path семантически указывает на «строку», но это только интерпретация данных.

В c строки часто используют char *, но только в предположении, что указатель находится на первом символе строки, а другие символы следуют в памяти, пока вы не достигнете нулевого терминатора. Это не меняет того факта, что это просто указатель на символ.

3 голосов
/ 18 мая 2011

char *path[] - это массив указателей.char *path - это одиночный указатель.

Как создать указатель на символ, а не на строку?

'Строка' в C - это просто указательк char, который имеет соглашение о том, что является началом последовательности символов, заканчивающейся на '\ 0'.Вы можете объявить указатель на один char таким же образом, вы просто должны позаботиться о его использовании в соответствии с данными, на которые он фактически указывает.

Это похоже на концепцию, что charв C это просто целое число с довольно ограниченным диапазоном.Вы можете использовать этот тип данных как число, как значение true / false или как символ, который в какой-то момент должен отображаться как глиф.Интерпретация того, что находится в переменной char, зависит от программиста.

Отсутствие первого класса, полноценного «строкового» типа данных - это то, что отличает C от большинства других языков высокого уровня.Я позволю вам решить для себя, будет ли он отличать С от хорошего или плохого.

3 голосов
/ 18 мая 2011

char *path - указатель на символОн может использоваться для указания на один символ, а также для указания на символ в массиве с нулевым символом в конце (строка)

char *path[] - массив указателей на символ.* Указатель на массив char будет char (*path)[N], где N (размер массива) является частью типа указателя.Такие указатели не используются широко, потому что размер массива должен быть известен во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...