2015-02-08 12 views
0

У меня возникли проблемы с пониманием того, как c использует puts() для отображения частей сообщения. Два способа, которые я бы рассматривал как эквивалентные, не работают одинаково с функцией. Напримерputs() вопросы с const char

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); 

, как это ставит() различие между ними и компилировать только один? Компилятор жалуется, что ему нужен символ «const», но даже если я попытаюсь использовать этот синтаксис, он терпит неудачу. Может кто-нибудь объяснить это?

+4

'msg [6]' это то же самое, что '* (msg + 6)' ... –

ответ

1

Оператор индекс также разыменовывает указатель, так

msg[6] эквивалентно *(msg + 6), не msg + 6.

Кроме того, вы не можете передать const char* функции, ожидая char*. т. е. вам также необходимо обновить подпись функции.

0

msg + 6 не то же самое, как msg[6].

В соответствии с вашим кодом, msg+6 является char *, а msg[6] представляет собой char.

Цитирование из man page из puts(), синтаксис

int puts(const char *s); 

так, аргумент puts() должен быть const char *, не char.

Смежные вопросы