構造体の最初の要素のアドレスが構造体のアドレスと同じであることがわかりました。しかし、構造のアドレスを逆参照しても、最初のデータメンバの値は返されません。しかし、最初のデータメンバーの参照解除アドレスは、その値を返します。例えば。構造体のアドレス= 100、構造体の最初の要素のアドレスも100です。逆参照は、両方で同じように動作するはずです。最初のメンバーの値を取得する構造体を参照しない
コード:
#include <iostream>
#include <cstring>
struct things{
int good;
int bad;
};
int main()
{
things *ptr = new things;
ptr->bad = 3;
ptr->good = 7;
std::cout << *(&(ptr->good)) <<" " << &(ptr->good) << std::endl;
std::cout << "ptr also print same address = " << ptr << std::endl;
std::cout << "But *ptr does not print 7 and gives compile time error. Why ?" << *ptr << std::endl;
return 0;
}
'*&some_type'は常に限り、あなたはどんな奇抜な演算子のオーバーロードを持っていないとして'あなたにsome_type'を与える必要があります。 – NathanOliver
ポインタを逆参照すると、ポインタが指している値が得られます。ポインタが構造体を指している場合、 "value"は*構造体*です。 –
また、最初のメンバ*のアドレスは構造体のアドレスと同じでも構いませんが、構造体へのポインタは最初のメンバへのポインタではありません。タイプは最初とは異なっています。 –