計算機程序在存儲數據時必須跟蹤三種基本屬性: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