计算机程序在存储数据时必须跟踪三种基本属性:ios
类型
地址
值
是多少众所周知,对于常规变量a,&a
是存储地址,a是值。对于指针变量p,p是存储地址,*p
则是值。下面经过一个例子来辨析取值符&
和间接值*
(indirect value)c++
#include <iostream> using namespace std; ///* & 辨析 int main() { int a; a=10; cout<<&a<<endl; int & b=a;//这里的b是一个reference,初始化时必须赋值。 cout<<&b<<":"<<b<<endl; int* c=&a;//同类型之间才能赋值,&a是(int*)类型 cout<<c<<":"<<*c<<endl; return 0; } /*output 0x28ff04 0x28ff04:10 0x28ff04:10 */ /*a和b区别: (gdb) p a $2 = 10 (gdb) p &b $3 = (int *) 0x400970 (gdb) p b $4 = (int &) @0x7fffffffe55c: 10 */
能够看出,b不是真正意义上的int类型,可是能够看成int用。&b就是(int*)spa
因此咱们要想在参数传递中修改实参的值,就要经过[1]中Exchg2 (int &x=a,int &y=b)
或者Exchg3(int* x=&a,int* y=&b)
。 明白这一点以后,指向指针的指针也好理解了。.net