2017-01-11 2 views
1

Im folgenden Programm wird die gespeicherte Zeichenfolge mit cin geändert, wodurch die Adresse geändert wird. Die Adresse des ersten Elements von string wird durch s dargestellt. Die Adresse des ersten Elements ist die Zeichenfolge selbst. Somit wurde es geändert, wenn ein neuer String eingegeben wird. Wenn ich versuche, &s[0] zu cout auszugeben, gibt es die ganze Schnur.Wie können Sie einen konstanten Zeiger auf das erste Zeichen in einem Zeichenarray erhalten?

#include<iostream> 
using namespace std; 
int main() { 
    char s[6]; 
    cin >> s; // say abcde 
    cout << s ; 
    cout << &s[0] ; // gives abcde 

    cin >> s; // say stack 
    cout << s; 
    cout << &s[0] ; gives stack 
} 
+2

Und welche Adresse ändert sich genau? – DeiDei

+0

Nicht sequitur. Die im Array gespeicherte Zeichenfolge ändert sich. Dies hat nichts mit seiner Adresse zu tun. –

+0

Sie sollten wirklich [ein gutes Buch über C++] lesen (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list?lq=1). –

Antwort

2

Die Adresse ändert sich nicht, die an der Adresse gespeicherten Daten ändern sich. Der Grund dafür, dass die gesamte Zeichenfolge gedruckt wird, liegt darin, dass Sie einen Zeiger an cout übergeben und ein Array an eine Funktion (oder einen Stream) übergeben werden kann, indem Sie einen Zeiger auf das erste Element geben. Das Übergeben eines Zeigers an das erste Zeichen ist wie das Übergeben einer Zeichenfolge im C-Stil. Wenn Sie die Adresse des ersten Zeichens ausgeben möchten, müssen Sie den Zeiger auf void*: cout<<(void*)&s[0] (das wird die Adresse des ersten Zeichens drucken) umwandeln.

+0

@Quentin Ich habe das behoben, ist es jetzt besser? – theo2003

+0

@Quentin Ich werde das auch reparieren, danke! (Ernsthaft) EDIT: Ist es besser? – theo2003

+0

Ja, ich habe meine Stimme geändert. Danke für deine Zeit :) – Quentin

Verwandte Themen