Die innere scanf("%d %d",&i,&j)
gibt eine Zählung zurück, wie 2,1, EOF (oder vielleicht 0).
Wenn Sie diesen Wert der Formatzeichenfolge "%d %d"
hinzufügen, wird das Format um den Wert, z. B. um 2, versetzt, um " %d"
zu bilden. Dies ist einfach eine Zeigeraddition. @John Bollinger
Dann Code macht das Äquivalent von scanf(" %d");
die undefinierten Verhalten ist (UB), da es eine passende int *
fehlt mit dem " %d"
zu gehen. @mch
Kann mir bitte jemand die Funktionsweise erklären?
Es ist nicht "funktioniert", es ist UB.
Eine Variante, die auf thin ice tritt. Es wird "funktionieren", wenn der erste scanf()
2 zurückgibt. Doch das sieht für mich wie ein Hacker-Code aus.
int main() {
int i,j;
scanf("%d %d"+scanf("%d %d",&i,&j), &i);
printf("%d %d",i,j);
return 0;
}
Ich bin überrascht, dass es mit gcc3.4.4 kompiliert. Das ist sehr seltsam für mich ... – cleblanc
es funktioniert nicht für mich –
Ich denke, es ist UB. – BLUEPIXY