2016-09-14 1 views
0

ich als so ein Verfahren Header gegeben bin:C++ char Zeiger auf char Variable

char* thisMethod(char* input){} 

ist es möglich, zu sagen,

char var = input[0]; 

? Ich weiß, dass "Eingabe" in Form eines Char-Arrays sein wird.

Ich bin natürlich neu in C++ Zeiger werfen mich ab. Ich habe versucht zu erforschen, wie man mit Char-Pointer-Funktionsargumenten arbeitet, konnte aber nichts Spezifisches finden, das helfen könnte. Danke für die Hilfe.

+1

Soll diese zweite Codezeile in die Funktion eingefügt werden? Wenn ja, schreibe es so. Und ja, wenn Sie das tun, wird das Zeichen, auf das "input" zeigt, in "var" kopiert. –

+0

Bei Nissen auswählen, alles was Sie garantieren können ist, dass es ein Zeichen gibt, auf das der Zeiger zeigt. Alles andere ist eine Annahme. Um mehr als ein Zeichen zu übergeben, verwenden Sie 'std :: string' oder' std :: vector 'oder einen anderen Container. –

Antwort

0

Solange es innerhalb der Funktion ist und input zeigt auf etwas gültig (nicht NULL/nullptr und kein Müll Lage), dann char var = input[0]; tun, ist einfach gut. Es ist das gleiche wie char var = *input.

P.S Wenn es eine Zeichenfolge sein soll, empfehle ich die Verwendung std::string.

0

Es gibt zwei Möglichkeiten, einen Wert von einem Zeiger zu erhalten: * und []. Die folgenden sind äquivalent:

char var1 = *input; 
char var2 = input[0]; 

die Halterungen mit ist häufiger, wenn Sie wissen, dass Sie ein Array übergeben wurden, da es Ihnen erlaubt, einen Index zu liefern. Sie müssen wissen, wo sich das Ende des Arrays befindet, damit Sie keinen Zugriff darauf versuchen. In Ihrer Funktion fehlt dieses wichtige Detail.

+0

Jetzt wäre es in Ordnung, Eingang [1] Eingang [2] usw. zu verwenden, um das char-Array fortzusetzen, von dem ich weiß, dass es vom Zeiger betrachtet wird? Oder gibt es eine Möglichkeit, das Char-Array in eine Zeichenfolge zu platzieren, so dass es einfacher ist, die Größe/Grenzen von char []/string zu verfolgen? –

+0

@BrandonWalker Die übliche Konvention mit Zeichenfolgen ist so, dass jedes Zeichen gültig ist, bis Sie ein Zeichen mit dem Wert Null erreichen. Nicht "0", sondern "0". Wenn Sie das haben, können Sie es einfach in eine 'std :: string' mit einfacher Zuweisung kopieren. –

1

Es ist ein Irrglaube, dass Sie in weitere Schwierigkeiten führen:

Ich weiß, dass „Input“ in Form eines char-Array sein.

NOPE: durch den Umfang dieser Funktion ist ein inputZeiger auf ein Zeichen. Die Funktion hat keine Möglichkeit zu wissen, wo ein solcher Zeiger herkommt.

Wenn es beim Aufruf der Funktion aus einem Array übernommen wurde, wird es eine pointer to the first element of that array sein.

Da Zeiger ein arithmetisches haben, die Offsets und weil der [] Operator angewandt Zeiger übersetzt a[b] = *(a+b) per Definition, egal in welchem ​​Code hinzufügen kann, wenn ein a Zeiger ist, *a und a[0] sind perfekt synonym.

denken an eine Anordnung als eine Folge von Kästen und einen Zeiger als Hand Zeigefinger

einen Offset zu einem Finger Zugabe (wie finger+2) bedeutet "Wieder Punkt es beiseite "und die Aufhebung der Referenzierung (wie *finger) bedeutet" schau hinein, was es auf zeigt ".

Der Zeiger [] auf Zeigern ist nur eine Verknüpfung, um beide Vorgänge gleichzeitig auszuführen.

Arrays sind eine andere eindeutige Sache. Denken Sie nicht an sie, wenn Sie mit Zeigern arbeiten, da in komplexeren Situationen, wie multidimensionalen Arrays oder Multi-Indirektion-Zeigern, der Ausdruck a [b] [c] nicht mehr auf die gleiche Weise funktioniert.