2012-05-16 3 views
1

Я хочу проверить приоритет оператора «* (получить указатель) и ++», как мне придумать предложение, а затем проверить его?как проверить приоритет оператора

char* s 
*s++; 

Это не может проверить оператор ++, потому что это справа.

+5

Вы можете проверить его, просто просмотрев его онлайн? – Mysticial

ответ

1

Вы можете «проверить», выполнив мини-программу, а затем проверив выход.

int main() { 
    char c[] = "hello"; 
    char* s = c; 
    std::cout << *s++ << std::endl; // prints 'h' 
    std::cout << *s << std::endl; // prints 'e' 
} 
2

Вы не указали, но из вашего примера, я предполагаю, что вы имеете в виду постфикса оператора ++, а не префикс формы. В этом случае ваше выражение:

*s++; 

является хорошим тестом старшинство операторов, так как это может быть истолковано либо как:

(*s)++; // -> increment the char pointed at by s 

или:

*(s++); // -> increment the pointer s itself 

в зависимости от который оператор связывает более тесно (имеет более высокий приоритет).

Фактически, правило в C/C++ заключается в том, что операторы постфикса всегда связывают более жестко, чем префиксные операторы, поэтому вторая интерпретация выше является правильной.

На самом деле см, которая произошла в вашей программе, вам потребуется некоторые дополнительные настройки и выход - в частности, необходимо инициализировать s, чтобы указать на что-то первым.

Пожалуйста, сообщите, если вам нужна помощь с этой последней частью.

+0

Возможно, это неправильно. Я думаю, возможно, не удалось проверить postfix ++ и *, потому что postfix ++ всегда вступает в силу после того, как «выражение запущено». – user1279988

+0

@ user1279988: Верно, что значение, возвращаемое оператором postfix ++, является старым (неизменным) значением, но это не означает, что приоритет оператора не влияет. Вы правы в том, что два разных скобки в моем ответе имеют то же значение, что и выражения (они равны просто «* s'), но они отличаются своими * побочными эффектами *. То есть вы сможете обнаружить разницу в следующих строках программы. Ключевое различие заключается в том, что ++ применяется к различным вещам в любом случае - так что это другой объект, который был увеличен. ... – ndkrempel

+0

@ user1279988: Например, вы можете выводить как '' s', так и '* s' до и после, чтобы увидеть, что изменилось. – ndkrempel

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