Я хочу проверить приоритет оператора «* (получить указатель) и ++», как мне придумать предложение, а затем проверить его?как проверить приоритет оператора
char* s
*s++;
Это не может проверить оператор ++, потому что это справа.
Я хочу проверить приоритет оператора «* (получить указатель) и ++», как мне придумать предложение, а затем проверить его?как проверить приоритет оператора
char* s
*s++;
Это не может проверить оператор ++, потому что это справа.
Вы можете «проверить», выполнив мини-программу, а затем проверив выход.
int main() {
char c[] = "hello";
char* s = c;
std::cout << *s++ << std::endl; // prints 'h'
std::cout << *s << std::endl; // prints 'e'
}
Вы не указали, но из вашего примера, я предполагаю, что вы имеете в виду постфикса оператора ++, а не префикс формы. В этом случае ваше выражение:
*s++;
является хорошим тестом старшинство операторов, так как это может быть истолковано либо как:
(*s)++; // -> increment the char pointed at by s
или:
*(s++); // -> increment the pointer s itself
в зависимости от который оператор связывает более тесно (имеет более высокий приоритет).
Фактически, правило в C/C++ заключается в том, что операторы постфикса всегда связывают более жестко, чем префиксные операторы, поэтому вторая интерпретация выше является правильной.
На самом деле см, которая произошла в вашей программе, вам потребуется некоторые дополнительные настройки и выход - в частности, необходимо инициализировать s
, чтобы указать на что-то первым.
Пожалуйста, сообщите, если вам нужна помощь с этой последней частью.
Возможно, это неправильно. Я думаю, возможно, не удалось проверить postfix ++ и *, потому что postfix ++ всегда вступает в силу после того, как «выражение запущено». – user1279988
@ user1279988: Верно, что значение, возвращаемое оператором postfix ++, является старым (неизменным) значением, но это не означает, что приоритет оператора не влияет. Вы правы в том, что два разных скобки в моем ответе имеют то же значение, что и выражения (они равны просто «* s'), но они отличаются своими * побочными эффектами *. То есть вы сможете обнаружить разницу в следующих строках программы. Ключевое различие заключается в том, что ++ применяется к различным вещам в любом случае - так что это другой объект, который был увеличен. ... – ndkrempel
@ user1279988: Например, вы можете выводить как '' s', так и '* s' до и после, чтобы увидеть, что изменилось. – ndkrempel
Вы можете проверить его, просто просмотрев его онлайн? – Mysticial