“引用”和“取消引用”的含义
我在互联网上阅读不同的东西,感到困惑,因为每个网站都说不同的东西。
谈到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. }
结论:
-
&
[地址运算符]用于参考。 -
*
[星号运算符]用于解除引用。