Ставит () вопросы с помощью const char
У меня проблемы с пониманием того, как c использует put () для отображения частей сообщения. Два способа, которые я бы назвал эквивалентными, не работают одинаково с функцией. Например
void skippie(char *msg)
{
puts(msg + 6);
}
char *msg = "Don't call me!";
skippie(msg);
Это хорошо компилируется, однако это не
void skippie(char *msg)
{
puts(msg[6]);
}
char *msg = "Don't call me!";
skippie(msg);
как put () различает два и компилирует только для одного? Компилятор жалуется, что ему нужен "const" символ, но даже если я попытаюсь использовать этот синтаксис, он потерпит неудачу. Кто-нибудь может объяснить это?
2 ответа
Оператор индекса также разыменовывает указатель, поэтому
msg[6]
эквивалентно *(msg + 6)
не msg + 6
,
Кроме того, вы не можете передать const char*
к функции, в то время как он ожидает char*
, то есть вы также должны обновить сигнатуру функции.
msg + 6
это не то же самое, что msg[6].
Согласно вашему коду, msg+6
это char *
, в то время как msg[6]
представляет char
,
Цитата из справочной страницы puts()
синтаксис
int puts(const char *s);
Итак, аргумент puts()
должен быть const char *
не char
,