* ++ argv [1] in C. Was bedeutet das?

8

Was wird die Ausgabe des unten angegebenen Programms (myprog.c) sein, wenn es von der Kommandozeile ausgeführt wird?

%Vor%

Ich verstehe argv [1] wird Freitag sein und ++ argv [1] bedeutet Dienstag. Ich könnte falsch liegen. So oder so, ich verstehe nicht, was der ganze Ausdruck bedeuten wird.

    
Krithi07 08.08.2014, 14:19
quelle

3 Antworten

12

Nach Vorrangregeln für Operatoren entspricht der Ausdruck *(++(argv[1])) . Mit anderen Worten, argv[1] wird zuerst ausgewertet, was auf die Zeichenfolge "friday" verweist. Als Nächstes ändert das Präfix " ++ " den Verweis auf die Zeichenfolge "riday" . Schließlich gibt die% dereferenz * das Zeichen 'r' zurück.

    
Drew McGowen 08.08.2014, 14:26
quelle
9
%Vor%

Ergo, *++argv[1] gibt Ihnen das Zeichen ++argv[1] points to, was 'r' ist. Demo .

    
T.C. 08.08.2014 14:26
quelle
4
  

Was wird die Ausgabe des unten angegebenen Programms (myprog.c) sein, wenn es von der Kommandozeile ausgeführt wird?

Es ist furchtbar schwer, Programmierung zu lernen, ohne auf einen Computer mit einem Compiler zuzugreifen. Was hat es ausgegeben, als Sie das Programm ausgeführt haben?

Wie auch immer ...

  • argv[0] ist ein Zeiger auf eine Zeichenfolge, die den Programmnamen enthält, und die folgenden Argumente sind Zeiger auf die anderen Befehlszeilenparameter.
  • So argv[1] ist ein Zeiger, der auf die Zeichenkette "friday" verweist, oder vielmehr auf das erste Element 'f' .
  • ++argv[1] erhöht diesen Zeiger um 1 und zeigt stattdessen auf 'r' . (Btw diese Codezeile ist schlechte Praxis und schlechter Programmierstil. Nicht nur weil es schwer zu lesen ist, sondern auch, weil es im Allgemeinen eine schlechte Idee ist, die Befehlszeilenparameter zu ändern.)
  • Wenn Sie den Inhalt des Zeigers verwenden, erhalten Sie daher 'r' .
Lundin 08.08.2014 14:27
quelle

Tags und Links