2017-01-11 17 views
1

次のプログラムでは、格納された文字列はcinを使用して変更され、アドレスが変更されます。 stringの最初の要素のアドレスはsで表されます。最初の要素のアドレスは文字列そのものです。したがって、新しい文字列が入力されたときに変更されました。 &s[0]coutに出力しようとすると、文字列全体が返されます。文字配列内の最初の文字への定数ポインタを得る方法はありますか?

#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

どのアドレスが正確に変更されていますか? – DeiDei

+0

連続していない。配列に格納されている文字列が変化しています。これは、そのアドレスについては何も伴わない。 –

+0

あなたは本当に[C++の良い本](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list?lq=1)を読むべきです。 –

答えて

2

アドレスが変更されていないため、アドレスに格納されているデータが変更されています。 ポインタcoutに渡しているため、文字列全体が表示される理由は、最初のアイテムへのポインタを渡すことで配列を関数(またはストリーム)に渡すことができるからです。ポインタを最初のcharに渡すことは、Cスタイルの文字列を渡すことに似ています。最初の文字のアドレスを印刷する場合は、ポインタをvoid*cout<<(void*)&s[0]にキャストする必要があります(最初の文字のアドレスが出力されます)。

+0

@Quentin私はそれを修正しました、それは今より良いですか? – theo2003

+0

@クエンティン私もそれを修正します、ありがとう! (真剣に)編集:それは良いですか? – theo2003

+0

うん、私は私の投票を裏返した。ありがとうございました:) – Quentin

関連する問題