Профиль пользователя 碧海潮生碧海潮生的小屋ФотографииБлогСписки Сервис Справка
октября 05

C语言专题——运算符、优先级和结合性

有些运算符的优先级是错误的。
“当按照常规方式使用时,可能引起误会的任何运算符”就是存在错误优先级的运算符。
 
.的优先级高于*。->操作符用于消除这个问题。
*p.f变成了*(p.f)而不是(*p).f
 
[]高于*,于是int *ap[]中的ap变成了元素为int指针的数组。
 
函数()高于*,因此,int *fp()不再是函数指针了,而是一个函数,返回int *。
 
逗号运算符在所有运算符中优先级最低,所以,i = 1, 2就成了(i = 1), 2而不是i = (1, 2)。
逗号运算符的值是最右边操作数的值,逗号运算符结合性从左至右,因此又称为顺序求值运算符。
 
在表达式中如果有布尔操作、算术运算、位操作等混合计算,始终应该在适当的地方加上括号。
 
x = f() + g() * h();
乘法先于加法执行,但是g()和h()的调用可能以任何顺序出现。
同样,f()可能在乘法之前调用,也可能在乘法之后调用。
 
优先级和结合性规则告诉你哪些符号组成一个意群,
大部分这样的意群内部如何进行计算的次序是未定义的。
 
有些操作符,如&&和||等,其操作数的计算顺序是确定的,它们使用短路原则。
 
C语言中记住两个优先级就够了:乘法和除法先于加法和减法,在涉及其他操作符时一律加上括号。
 
结合性用于在几个操作符具有相同的优先级时确定先执行哪一个。
每个操作符拥有某一级别的优先级,同时也拥有左结合性或者右结合性。
 
所有的赋值符(包括复合赋值符)都具有右结合性(从右到左执行),因此可以使用连等的赋值形式。
唯一的三目运算符?:也是具有右结合性的。
 
所有优先级相同的操作符,它们的结合性也相同,这是必须如此的。
 
在函数调用中,各个参数的计算顺序是不确定的。
 

source: 《Expert C Programming》&《C Traps and Pitfalls》

Комментарии (1)

Подождите...
Введен слишком длинный комментарий. Сократите его.
Ничего не введено. Повторите попытку.
Не удается добавить комментарий в настоящее время. Повторите попытку позже.
Чтобы добавить комментарий, необходимо получить разрешение одного из родителей. Запросить разрешение
Один из родителей отключил функцию добавления комментариев.
Не удается удалить комментарий в настоящее время. Повторите попытку позже.
Превышено максимальное количество добавляемых комментариев в день. Повторите попытку через 24 часа.
Для учетной записи отключена возможность добавлять комментарии, поскольку наши системы обнаружили, что вами, возможно, отправляется нежелательная почта другим пользователям. Если вы считаете, что учетная запись отключена ошибочно, обратитесь в службу поддержки Windows Live.
Выполните указанную ниже проверку безопасности, чтобы завершить добавление комментария.
Вводимые во время проверки безопасности символы должны совпадать с воспроизводимыми звуковыми символами или символами, отображенными на картинке.

Чтобы добавить комментарий, войдите с помощью идентификатора Windows Live ID (если используется учетная запись служб Hotmail и Xbox LIVE или программы Messenger, у вас уже есть идентификатор Windows Live ID). Войти


Нет идентификатора Windows Live ID? Зарегистрироваться

Фотография контакта Аноним
Ddotcdot пишет:
效率好高呀
окт. 5

Обратные ссылки

URL-адрес ссылки на эту запись:
http://jx-kingwei.spaces.live.com/blog/cns!F7A152EB74B9576E!719.trak
Блоги, ссылающиеся на эту запись
  • Нет