1. Les paramètres de la fonction principe contiennent des expressions de pointeur. Dans quel ordre sont-ils calculés ? Les résultats de l'opération de code ne sont évidemment pas de gauche à droite.
#include <stdio.h>
int main() {
int a[5] = { 1,2,3,4,5 };
int *p = a;
printf("%d\n", *p);
printf("%d %d %d %d\n", *(++p)++,*p, *p++, *p);
getchar();
return 0;
}
Modifier une variable plusieurs fois dans une seule instruction est un comportement indéfini et peut avoir des résultats différents selon les plates-formes. Cette question n'a aucun sens.
printf{"%d",++i}
signifie deux opérationsExécutez d'abord i=i+1, puis affichez i
Et i++ signifie
Première sortie, puis exécutez i=i+1
L'ordre de fonctionnement des paramètres de fonction a peu à voir avec la logique interne de la fonction. Il doit être calculé avant d'être poussé sur la pile (avant que la fonction ne soit exécutée)
++p
,函数结束后,再计算p++
. Si vous souhaitez connaître la séquence spécifique, vous pouvez vous référer au code d'assemblage (la signification spécifique sera mise à jour demain, désolé)Digression :
Je suis dans l'environnement2 et 3 qui apparaissent dans les résultats peuvent encore être expliqués.
4 C'est très étrange. Si je dois l'expliquer à contrecœur, le
++
en dehors des parenthèses de*(++p)++
signifie aussip<.> Cela fonctionne,
*(++p)++
括号外面的++
也对p
起作用了,但是形如
p++
运算符,应该在语句结束后才自增的,所以这样解释明显不对。我在
Cygwin + gcc (GCC) 5.4.0
Mais l'opérateur sous la formep++
doit être incrémenté après la fin de l'instruction, donc cette explication est évidemment fausse.Cygwin + gcc (GCC) 5.4.0
. Les résultats d'exécution sont les suivants 4 n'apparaît pas. 🎜 rrreeeL'ordre dans lequel les paramètres de fonction sont placés sur la pile est certain, juste
参数的求值顺序是未指定
的,编译器只保证在
printf
调用之前,所有参数的值是已知的这方面的资料可以搜索
序列点(Sequence Point)