Arrays in c werden immer als Referenz übergeben und printf ist eine call-by-value-Funktion. Warum übergeben wir Array an die printf-Funktion, um einen String zu drucken?Wenn Arrays immer Call for Reference übergeben werden, wie können Arrays dann an Funktionen wie printf übergeben werden, die streng nach Wert benannt sind?
Antwort
Zuerst werden Arrays nicht als Referenz in C übergeben. Sie Zerfall zu einem Zeiger, der von Wert an die Funktion übergeben wird.
Es gibt keine übergeben durch Verweis in C. Es kann nur mit übergeben Wert übergeben werden.
Wir übergeben Arrays nicht wirklich an printf
: es sind die oben erwähnten Zeiger, die wir durch eine implizite Umwandlung (Zerfall) erhalten. Dieser Zeiger kann genauso gut dereferenziert werden, um auf den Inhalt des Arrays zuzugreifen, so dass ein Array "nach Wert" nicht benötigt wird.
Aber wir schreiben * (name_of_array) nicht als Argument für printf, wir schreiben einfach den Namen des Arrays. Ich meine, wir schreiben printf ("% s", name_of_array) anstelle von printf ("% s", * name_of_array). Wie kommt es dann (angesichts der Tatsache, dass das Array zum Zeiger abfällt), ist es entreferenziert? – user6112826
@ user6112826 Das Array wird als Zeiger übergeben. Der Parameter der Funktion für dieses Array ist dann "T * ptr", wobei "T" ein beliebiger Typ ist. Die Funktion kann diesen Zeiger einfach dereferenzieren, indem sie 'ptr [N]' ausführt, wobei 'N' ein beliebiger ganzzahliger Ausdruck wie '5' oder 'i + 2' ist. Sehen Sie sich einfach eine einfache 'printf'-Implementierung an und Sie werden es verstehen. – Downvoter
@ user6112826: Wenn es nicht der Operand der Operatoren 'sizeof' oder unary' & 'ist, behandelt der Compiler' name_of_array' als Zeiger auf das erste Element des Arrays. Siehe [diese Antwort] (http://stackoverflow.com/questions/4607128/in-c-are-arrays-pointers-or-edu-as-pointers/4608421#4608421) für eine detailliertere Erklärung. –
Sie übergeben Arrays nicht an printf, stattdessen übergeben Sie die Werte im Array.
int arr[] = {1,2,3};
printf("%d",arr); //Undefined behavior(garbage value)
printf("%d",arr[0]); //will print 1
Sie können auch einen Zeiger als Argument an eine Funktion übergeben, aber nicht eine Referenz in C
bearbeiten
Bei char*
die Zeiger, um alle Zeichen in dem Array zu verkohlen ist kann angezeigt werden, bis die NULL-Zeichen
char* str = "Hello";
printf("%s",str);
'char *' ist ein spezieller Fall, der erwähnt werden sollte. –
Dies ist möglich, wenn Sie ein Array von Zeichen erstellen und den Formatbezeichner% s zum Drucken von Zeichenfolgen verwenden. – user6112826
@ user6112826 Wie von Fiddling Bits erwähnt, ist es ein spezieller Fall. – XZ6H
- 1. Sollte ich Arrays in Zeiger umwandeln, wenn sie an variadic Funktionen wie printf übergeben werden?
- 2. Erstellt GCC typedefs für Arrays, die an Funktionen übergeben werden?
- 3. Übergeben von Arrays an Funktionen C++?
- 4. Mehrdimensionale Arrays an Funktionen übergeben in C
- 5. Werden ILists nach Wert übergeben?
- 6. Werden Arrays per Referenz oder Wert in PHP übergeben?
- 7. Werden nummerische Arrays als Referenz übergeben?
- 8. Wie werden Funktionen ausgewertet, wenn sie als Argumente übergeben werden
- 9. Haskell-Arrays sind zu streng?
- 10. Wie können Ressourcenbezeichner benannt werden?
- 11. Übergeben von Arrays an SQL-Funktionen von .NET C#
- 12. Wie Arrays und Parameter mit Methodenpost von Jquery übergeben werden
- 13. Übergeben eines Arrays an .map() Fehler
- 14. Elementvariablen eines Arrays von Strukturen, die innerhalb einer anderen Struktur sind, werden nicht durch Referenz übergeben
- 15. Wie können Steuerelemente korrekt übergeben werden?
- 16. Übergeben von Arrays durch Funktionen Verwenden von Zeigern
- 17. Können Params, die an Pytest Fixture übergeben werden, als Variable übergeben werden?
- 18. Können Arrays zur Kompilierzeit indiziert werden?
- 19. Wie können Variablen an eingeschlossene Aufgaben in ansible übergeben werden?
- 20. Wie werden Scatterplot-Punkte nach Namen benannt?
- 21. Wie Dateien nach mtime sortiert und an grep übergeben werden?
- 22. Funktionen, die Arrays zurückgeben
- 23. Wie erzwinge Python3 nach Wert übergeben?
- 24. Wie können Variablen in ZF2 global an layout.phtml übergeben werden?
- 25. Wie können Daten vom Detailansicht-Controller an uitableview übergeben werden?
- 26. Wie Argumente an Funktionen übergeben werden, die im Ereignisobjekt in backbone.js gebunden sind
- 27. Wie Umgebungsvariablen an Pytest übergeben werden
- 28. Werden Array-Elemente auch nach Wert oder Verweis übergeben?
- 29. Übergeben Arrays in Funktionen, file.exe funktioniert nicht mehr
- 30. Sind Java-Funktionsparameter immer als Wert übergeben?
C Pass immer Wert unter Verwendung erreicht, Arrays einschließlich finden Sie in diesem Beitrag http://stackoverflow.com/questions/22 29498/passing-by-reference-in-c –