2017-06-22 4 views
1

Ich bin ein Anfänger, der versucht, C++ zu lernen. Entschuldigung, wenn meine Frage nicht richtig strukturiert ist? Ich arbeitete mit Arrays und fand heraus, dass ich die Werte, die in einem Array gespeichert sind, über eine Funktion manipulieren kann, ohne das & oder das Pass-by-Referenzzeichen zu verwenden. Ich verstehe nicht, wie dies möglich ist, da das Fehlen von & Zeichen bedeutet, dass es durch Wert übergeben wird und eine Kopie erstellt wird, die manipuliert wird.Wie werden Arrays in C++ durch Referenz oder Wert oder durch Zeiger übergeben?

Anderswo, ich lese, dass Arrays von Zeigern übergeben werden, wenn dies der Fall ist, habe ich keine explizite Dereferenzierung verwendet, um die Daten zu bearbeiten. Kannst du mir bitte erklären, was passiert, wenn ich ein Array passiere?

Randbemerkung: Warum muss ich beim Übergeben eines 2D-Arrays in eine Funktion die Spaltengröße angeben?

+0

Arrays können Zerfall zu einem Zeiger auf das erste Element und es ist dieser Zeiger, der von Wert an eine Funktion übergeben wird. Dieser Verfall zum Zeiger ist einer der Gründe, um unformatierte Arrays zu vermeiden und stattdessen einen geeigneten Containertyp zu verwenden (wahrscheinlich 'std :: vector'). – user463035818

+0

Arrays werden von Zeigern übergeben. Wenn Sie arr [i] verwenden, ist dies äquivalent zu * (arr + i) wobei arr die Startadresse des Arrays ist. – user1438832

+1

... Ich sollte nicht in einem Kommentar antworten, aber ich bin mir sicher, dass es ein perfektes Duplikat gibt, finde es nicht atm – user463035818

Antwort

2

C-Array zerfällt zum Zeiger.

Einige Erklärungen sind zu irreführend

void foo(const char name[42]); 

ist in der Tat

void foo(const char* name); 

Nur Verweis/Zeiger (hässliche Syntax: /) erlauben Größe zu halten:

void foo(const char (&name)[42]); 
void foo(const char (*name)[42]); 
+0

Sieht immer noch besser aus als 'void foo (const char [42] & name)', oder tut es ... – DeiDei

+0

Das ist einer der Gründe, warum Sie '' std :: array'' anstatt '' T [] verwenden sollten '': Es ist weniger verwirrend, weil es nicht verfällt – nefas

Verwandte Themen