“引用”和“取消引用”的含义

我在互联网上阅读不同的东西,感到困惑,因为每个网站都说不同的东西。

谈到C.

我读了关于*引用操作符和& dereferencing操作符; 或者引用意味着使指针指向一个variables,而解除引用是访问指针所指向的variables的值。 所以我感到困惑。

我可以得到一个关于“引用和取消引用”的简单但彻底的解释吗?

引用是指取一个现有variables的地址(用&)来设置一个指针variables。 为了有效,必须将指针设置为与指针相同types的variables的地址,而不带星号:

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

取消引用指针意味着使用*运算符(星号字符)来访问存储在指针处的值:注意:存储在指针地址处的值必须是“相同types”的值,作为指针“指向”到,但是不能保证这种情况,除非指针设置正确。 指针指向的variables的types是最外面的星号的types。

 int n1; n1 = (*p1); 

无效的解除引用可能会或可能不会导致崩溃:

  • 任何解除引用任何未初始化的指针都可能导致崩溃
  • 用无效types转换解引用可能会导致崩溃。
  • 取消引用一个指向dynamic分配的variables并随后取消分配的variables会导致崩溃
  • 取消引用已经超出范围的variables的指针也会导致崩溃。

无效的引用更有可能导致编译器错误,而不是崩溃,但依赖编译器并不是一个好主意。

参考文献:

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. 

我一直听到他们用在相反的意义上:

  • &是引用操作符 – 它为您提供对某个对象的引用(指针)

  • *是取消引用操作符 – 它需要一个引用(指针)并将返回的引用的对象;

一开始,你有他们倒退: &是参考和*是取消引用。

引用variables意味着访问variables的内存地址:

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

解引用variables意味着访问存储在内存地址的variables:

 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 

find下面的解释:

 int main() { int a = 10;// say address of 'a' is 2000; int *p = &a; //it means 'p' is pointing[referencing] to 'a'. ie 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. * [星号运算符]用于解除引用。