16

私はC ++に少し慣れていないので、Qtで作業しようとすると、この紛らわしいことに出くわしました:

さまざまなチュートリアルの概念は、次のように述べています。

Class *obj;

*obj- 参照されたメモリに保存されたオブジェクトの値を表示します
obj- それが指しているメモリのアドレスになります

だから、私は次のようなことをします

*obj=new Class();

しかし、関数にアクセスしたい場合は、obj->function1(); 代わりに行う必要があります*obj->function1();

-- 理由はわかりません。通常のオブジェクトでは [ normalObj.function1();] が機能するためです。これは直接値であるためです。

では、ポインターオブジェクトの場合、関数にアクセスするためにメモリ参照を使用するのはなぜですか、それとも通常のオブジェクトの場合も常に参照するのですか

PS: 誰かが C++ でのポインターの使用法に関する優れたチュートリアルを教えてくれますか?

4

4 に答える 4

35

シンボルは、*ポインターを定義し、ポインターを逆参照するために使用されます。たとえば、intへのポインタを作成したい場合は、次のようにすることができます。

int *ptr;

この例では、これがintへ*のポインタであることを宣言するために使用されています。ここで、ポインターを宣言しておらず、既に宣言されているポインターでシンボルを使用している場合は、それを逆参照しています。ご存知かもしれませんが、ポインタは単なるアドレスです。ポインターを逆参照すると、そのアドレスが指している値を取得することになります。例えば:*

int pointToMe = 5;
int *ptr = &pointToMe;
std::cout << *ptr;

これにより、5が出力されます。また、新しいアドレスにポインタを割り当てていて、それが宣言に含まれていない場合は、シンボルを使用しません。*それで:

int pointToMe = 5;
int *ptr;
ptr = &pointToMe;

あなたがそれをする方法です。ポインタを変更して、アドレスが指す値に新しい値を割り当てることもできます。そのような:

int pointToMe = 5;
int *ptr = &pointToMe;
std::cout << *ptr; // Prints out 5
*ptr = 27;
std::cout << *ptr; // Prints out 27

今、->服従のシンボルのように機能します。.ポインタを逆参照してから、非ポインタオブジェクトで使用した場合と同じようにメンバー関数と変数を使用します。ポインタではないオブジェクトでも、->最初にアドレスを取得することでを使用できます。

CObj object;
(&object)->MemberFunction();

これはポインタの簡単な概要です。お役に立てば幸いです。

于 2012-07-07T08:19:42.323 に答える
7

「通常」.を使用してオブジェクトメンバーにアクセスできますが、最初にポインタを逆参照する必要があります。

演算子の優先順位により、これはのようになります(*obj).member。これを書くには多すぎると思う人にとってobj->memberは、より短い選択肢です。

cタイプのオブジェクトがある場合は、のメンバーであるポインタを逆参照することを意味しClassます。それが理由の1つであり、それは別のことを意味します。*c.ptrptrClass(*obj).member

于 2012-07-07T08:18:47.330 に答える
3

実際、あなたは間違っています。あなたがやる:

obj=new Class();

また

Class *obj = new Class;

これらは完全に異なります。

Class *obj;
*obj = new Class;

コンパイルしません。

objは typeClass*であるため、それを割り当てることができます (およびnew Class返されるもの)。

于 2012-07-07T07:29:16.857 に答える
2

より正確には、このようにすることができます

Class  obj;
Class* obj_ptr;

obj_ptr = &obj;

// Now onwards you can use the pointer to access data members and function

obj_ptr->a = 10; // Like this
于 2015-08-18T07:02:22.500 に答える