2017-09-12 1 views
0

Das Problem, das ich versuche, Array char arr[6] = {"1","2",etc.} zu einer Funktion übergeben, die Parameter wie diese void foo(char* &arr,...) und es funktioniert nicht. Kann mir das bitte jemand erklären?Weitergabe nach Referenzproblem?

+5

Weil ein Array kein Zeiger ist. Und ein Zeiger ist kein Array – StoryTeller

+2

Diese Fragen sind [hier] beantwortet (https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list/388282). – nwp

+1

Mögliches Duplikat von [Übergeben eines Arrays durch Referenz] (https://stackoverflow.com/questions/5724171/passing-an-array-by-reference) – AMA

Antwort

6

char arr[6] ist ein Array.

char* &arr ist ein (n lvalue) Verweis auf einen Zeiger.

Nun, da das Argument nicht vom richtigen Typ ist, muss es konvertiert werden. Ein Array verfällt implizit (Verfall ist eine Art Umwandlung) in einen Zeiger auf das erste Element.

Aber dieser verfallene Zeiger ist ein temporärer (ein rvalue). Nicht-konstante lvalue-Referenzen können sich nicht auf rvalues ​​beziehen, daher wäre es schlecht formuliert, foo mit einem Array-Argument aufzurufen.


Sie können eine Zeigervariable erstellen; das kann zu foo geben werden:

char* ptr = arr; 
foo(ptr, ...); 

Die Funktion dann diesen Zeiger ändern kann (das heißt, es zu einem anderen Objekt char macht Punkt), da die Referenz nicht-const ist.


PS. Es ist etwas sehr falsch mit der Initialisierung Ihres Arrays. "1" und "2" sind keine char Objekte.