私は最近、C ++の参照とポインターを実際に理解しようとしましたが、少し混乱しています。アドレスで値を取得し、値のアドレスを取得できる演算子*
と演算子は理解していますが、これらをsのような基本的な型で単純に使用できないのはなぜですか?&
int
たとえば、次のようなことを実行できず、奇妙なポインタ変数の作成を使用できない理由がわかりません。
string x = "Hello";
int y = &x; //Set 'y' to the memory address of 'x'
cout << *y; //Output the value at the address 'y' (which is the memory address of 'x')
上記のコードは、理論的には「x」の値を出力するはずです。「y」には「x」のメモリアドレスが含まれているため、「*y」は「x」である必要があります。これが機能する場合(ちなみにコンパイルしようとしても機能しません-文字列からintに変換できないことを示しています。これは、メモリアドレスがint罰金に保存されます)。
なぜ特別なポインタ変数宣言(例string *y = &x
)を使用する必要があるのですか?そして、この中*
で、上記の行の例で文字通りポインタ宣言の演算子を使用すると、「y」の値を「x」のメモリアドレスに設定しますが、後で値にアクセスするときにメモリアドレス('&x')では、以前にメモリアドレスに設定したものと同じ'*y'を使用できます。