необходимое объяснение для c-программы - PullRequest
0 голосов
/ 18 сентября 2011

В купленной мною c-книге программа упражнений обозначена как

что выводится для следующего фрагмента кода?

printf(3+"Welcome"+2);

я получил ответ (выполняя его в TC ++)

Но я не могу получить фактический механизм. пожалуйста, объясните мне фактический механизм позади этого.

Ответы [ 3 ]

9 голосов
/ 18 сентября 2011

Это называется арифметикой указателя: 2 + 3 = 5, а «я» - это остальная часть строки, начиная со смещения 5.

PS: выбросить эту книгу.

3 голосов
/ 18 сентября 2011

Когда это скомпилировано, строка "Welcome" становится const char *, указывая на первый символ строки.В C, с символьными строками (как любой указатель), вы можете делать арифметику указателей.Это означает, что указатель + 5 указывает на 5 мест за указателем.

Поэтому («Добро пожаловать» + 5) будет указывать 5 символов после «W» на подстроку «me».

Вкл.примечание стороны, как другие предложили, это не походит на хорошую книгу.

2 голосов
/ 18 сентября 2011

Строка (например, "Welcome") - это массив символов, оканчивающийся символом NUL (так что на самом деле "Welcome\0").

То, что вы делаете, - это доступ к пятому символу (3 + 2 = 5). Это символ 'm' (индексы массива начинаются с 0).

printf будет продолжать читать, пока не достигнет NUL-символа.

...