※ ChatGPTを利用し、要約された質問です(原文:C++の&について)
C++のアドレス演算子&について
このQ&Aのポイント
C++では、アドレス演算子&を使って変数のアドレスを取得することができます。
イテレータの実体を*で取得し、&でアドレスを取得することで、Pstructobj型の変数に代入することができます。
しかし、1.の&を使った方法はアクセス違反が起こる可能性があります。
VS2010です。
2.については、イテレータの実体を*で取得し、&でアドレスを取得することで、Pstructobj型の変数に代入しているのはわかるのですが、
1.の&は、どういう役割になるのでしょうか。
---------------------------
typedef struct{
int iVal;
} structobj, *Pstructobj;
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<structobj> structobjList;
structobj a,b;
a.iVal = 5;
structobjList.push_back(a);
// 1.コンパイルは通るが、iValにアクセスするとアクセス違反
Pstructobj oP1 = (Pstructobj&)*structobjList.begin();
// 2.問題なし
Pstructobj oP2 = &*structobjList.begin();
return 0;
}
補足
でたらめなキャストは理解できましたが、 structobj&型と、structobj型の違いとは何でしょうか。 仮引数の型に指定する&(参照変数)は知っていますが、、、