75

インターネットでさまざまなことを読んで混乱しました。すべてのウェブサイトが異なることを言っているからです。

*参照演算子と逆参照演算子について読みました&。または、参照とは、ポインターが変数を指すようにすることを意味し、逆参照とは、ポインターが指す変数の値にアクセスすることです。だから私は混乱しました。

「参照と逆参照」について、簡潔かつ完全な説明を得ることができますか?

4

7 に答える 7

112

参照とは、既存の変数のアドレスを (& を使用して) 取得し、ポインター変数を設定することを意味します。有効であるためには、ポインターは、アスタリスクなしで、ポインターと同じ型の変数のアドレスに設定する必要があります。

int  c1;
int* p1;
c1 = 5;
p1 = &c1;
//p1 references c1

ポインターの逆参照とは、* 演算子 (アスタリスク文字) を使用して、ポインターが指すメモリ アドレスから値を取得することを意味します。ポインターが「指す」変数ですが、ポインターが正しく設定されていない限り、これが当てはまるという保証はありません。ポインターが指す変数の型は、最も外側のアスタリスクを除いた型です。

int n1;
n1 = *p1;

無効な逆参照により、クラッシュが発生する場合と発生しない場合があります。

  • 初期化されていないポインターを逆参照すると、クラッシュが発生する可能性があります
  • 無効な型キャストで逆参照すると、クラッシュが発生する可能性があります。
  • 動的に割り当てられ、その後割り当て解除された変数へのポインターを逆参照すると、クラッシュが発生する可能性があります
  • スコープ外になった変数へのポインターを逆参照すると、クラッシュが発生する可能性があります。

無効な参照は、クラッシュよりもコンパイラ エラーを引き起こす可能性が高くなりますが、これをコンパイラに依存することはお勧めできません。

参考文献:

http://www.codingunit.com/cplusplus-tutorial-pointers-reference-and-dereference-operators

& is the reference operator and can be read as “address of”.
* is the dereference operator and can be read as “value pointed by”.

http://www.cplusplus.com/doc/tutorial/pointers/

& is the reference operator    
* is the dereference operator

http://en.wikipedia.org/wiki/Dereference_operator

The dereference operator * is also called the indirection operator.
于 2013-01-08T22:15:56.457 に答える
21

私はいつもそれらが反対の意味で使われているのを聞いてきました:

  • &は参照演算子です -- オブジェクトへの参照 (ポインター) を提供します。

  • *逆参照演算子です。参照 (ポインター) を受け取り、参照先のオブジェクトを返します。

于 2013-01-08T22:16:46.657 に答える
13

まず、それらを後方に持っています:&は参照であり、*逆参照です。

変数を参照するということは、変数のメモリ アドレスにアクセスすることを意味します。

int i = 5;
int * p;
p = &i; //&i returns the memory address of the variable i.

変数の逆参照とは、メモリ アドレスに格納されている変数にアクセスすることを意味します。

int i = 5;
int * p;
p = &i;
*p = 7; //*p returns the variable stored at the memory address stored in p, which is i.
//i is now 7
于 2013-01-08T22:17:25.067 に答える
9

以下の説明を見つけてください。

int main()
{
    int a = 10;// say address of 'a' is 2000;
    int *p = &a; //it means 'p' is pointing[referencing] to 'a'. i.e p->2000
    int c = *p; //*p means dereferncing. it will give the content of the address pointed by 'p'. in this case 'p' is pointing to 2000[address of 'a' variable], content of 2000 is 10. so *p will give 10. 
}

結論 :

  1. &[アドレス演算子]は参照に使用されます。
  2. *[スター演算子]は、逆参照に使用されます。
于 2013-01-09T05:38:59.767 に答える