Ставит () вопросы с помощью 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,

Другие вопросы по тегам