class A {
public: int i;
};
A *a = new A();
a->i
のアドレスを取得するにはどうすればよいですか?私はまた、&a->i
と&(a->i)
を試みたが、それらは時間のコンパイルエラーを生成します。C++では、クラスインスタンスのフィールドの値が格納されているアドレスを取得する方法は?
はあなたがコンパイルしようとした同じコードを提供していない
class A {
public: int i;
};
A *a = new A();
a->i
のアドレスを取得するにはどうすればよいですか?私はまた、&a->i
と&(a->i)
を試みたが、それらは時間のコンパイルエラーを生成します。C++では、クラスインスタンスのフィールドの値が格納されているアドレスを取得する方法は?
はあなたがコンパイルしようとした同じコードを提供していない
「クラス/構造体/共用体のタイプを持っている必要があります 『.I』の左」。必ずをコピーして貼り付けてください。あなたのコードの中には、構文的に正しいクラス宣言や変数宣言がなく、a->i
しか使われていないと主張したときに、エラーメッセージに ".i"が表示されるということがあります。ここで働いているコード:
#include <stdio.h>
class A {
public:
int i;
};
int main() {
A* a = new A();
int* i = &a->i;
printf("a: %p\na->i: %p\n", a, i);
return 0;
}
最終的に、あなたが言う構文はあなたがメンバーのアドレスを取得するために試してみましたが正解でした。エラーメッセージの構文は、a.i
でした。それはうまくいかず、その理由からエラーメッセージが表示されます。変数a
は、クラス、構造体、または共用体型ではありません。むしろ、ポインタの1つです。メンバーを得るためにポインタを間接参照する必要があります。
私はそれを実行すると、私はこれを取得:A
は単純なクラスですので、この出力が予想されるので、
$ ./a.out a: 40748 a->i: 40748
は、アドレスは同じです。最初のメンバーは、クラスのメモリの始めに置かれることがよくあります。 2番目のメンバ変数をクラスに追加し、そのアドレスを取得します。異なる値が表示されるはずです。 C++では
:
class A {
public: // note colon after public
int i;
}; // note semicolon after bracket
A *a = new A(); // note *a not a*
印刷へ:
cout << ios::hex << &a->i << endl;
は私にとって、これは正常に動作するようです。
& a-> iはうまくいくはずです。あなたのケースでは、クラスには1つのパブリック整数しかないので、aとiの両方のアドレスは同じになります。
あなたは正しい軌道に乗っているが、あなたは「&a.i
」
class A
{
public:
int i;
};
...
A *a = new A();
int *i = &a->i;
このコードをコンパイルするように見える入力したようにあなたが言及コンパイルエラーから、それが聞こえますか?
class A {
public:
int i;
};
int main() {
A *a = new A();
int *x = &a->i;
return 0;
}
グラムを使用して私のために、次の作品++
class A
{
public:
int m_i;
};
int
main()
{
A* a = new A();
int* i_ptr = &(a->m_i);
return 0;
}
私はあなたがA* a = ...
なくA a* = ...