Expressions

Une expression est une suite d'opérateurs et d'opérandes. Un opérateur représente une action et les opérandes ses paramètres.

Pour évaluer une expression, il est nécessaire de connaître les priorités entre les opérateurs qui la compose et leur associativité. L'ordre d'éxecution des actions peut être paramétré à l'aide des parenthèses.
Exemple : i + 3 * j et (i + 3) * j

Opérateurs

Type
Opérateur
Postfixé [] . (params) expr++ expr--
Unaire ++expr --expr +expr -expr ~ !
Conversion (type)expr
Multiplicatif * / %
Additif + -
Décalage << >>
Relationnel < > >= <=
Test d'égalité == !=
Et bit à bit &
Ou bit à bit exclusif ^
Ou bit à bit inclusif |
Et logique &&
Ou logique ||
Conditionnel ?:
Affectation = += -= *= /= %= >>= <<= >>>= &= ^= |=

Les opérateurs sont classés par ordre de priorité. Les opérateurs binaires sont tous associatifs à gauche, sauf l'affectation.

Les opérateurs à effet de bord, comme ++ ne doivent pas être utilisées lors de l'appel de fonction car l'ordre d'évaluation des paramètres est indéfinie. Voir test_effet_bord.c.
$ test_effet_bord
2 1

Le type des opérandes influe sur la nature de l'opération et son résultat. Certaines conversions sont également faites de façon implicite. Voir test_types2.c.
$ test_types2
0.000000 0.666667 0.666667

Arithmétique des pointeurs

L'arithmétique sur les pointeurs tient compte du type de l'objet pointé. Ainsi, une addition sur un pointeur peut être vue comme Ainsi, *(t +i), si t est un tableau, est équivalent à t[i]. Voir test_pointeurs.c.
$ test_pointeurs
&c = bffffbd0, sizeof(c) = 1, pc+1 = bffffbd1
&i = bffffbd8, sizeof(i) = 4, pi+1 = bffffbdc
&s = bffffbe0, sizeof(struct ma_struct) = 8, ps + 1 = bffffbe8
Balayage de t
contenu de bffffc00 = 1
contenu de bffffc04 = 2
contenu de bffffc08 = 3
contenu de bffffc0c = 4

Il est possible de créer des tableaux à plusieurs dimensions :
float m[5][10];
Dans ce cas m[i][j] est équivalent à *(m + i*10 + j).
Dans le cas général, si
type t[n1]...[nk];
t[i1]...[ik] sera équivalent à * (t + i1*n2* ... *nk + i2*n3* ... *nk + ... + ik)