&符号就是取地址符号, 含义只这么一个; *符号就是创建一个指针, 或者做一次地址跳转; 在任何编程语言中, 其实一个变量都代表了一个内存上的地址. int a = 10, 给a分配一个内存逻辑地址0x1001ff, 这个地址存放了值10; int &b = a, 给b分配和a一样的逻辑地址0x1001ff. 因此b就是a的别名;
好了, 最难的来了. int a = 10; // 给a分配一个内存逻辑地址0x100001, 这个地址存放了值10; int p = &a; //创建变量p, 给p分配地址0x100002, 这个地址存放的值是”0x100001”(a的逻辑地址值); int &q = p; //创建变量q, 给q分配地址也是0x100002, 因此这个地址存放的值还是a的逻辑地址值; *q = 20; //访问存放在q变量地址下的值, 获得了a的地址值, 再访问一下a的地址值, 修改上面的内容为20;
至此, 我觉得我基本解释清楚了&的作用机理, 它就是取地址; 而*的含义是做一次地址跳转;
【基本数据类型的引用】
[类型名] &[引用名]=[目标变量名]; / 例: int a=3; int &b=a; //引用必须初始化
/
一个比较好记的方法来区分 int const p与 int const p,把读作pointer to然后从后往前读. 第一个int const p就可以读作 p is a pointer to const int,p是指向常量的指针 第二个int* const p就可以读作 p is a const pointer to int,p是指向int型的常指针
const指针主要看const修饰p还是p,修饰p不能改变p的指向(不能使p指向其他变量),修饰p不能改变p的值(即p指向的变量的值)。 int const p;int const* p; 一种限制指针指向,一种限制指向的值。