【C語言】取值符&和間接值*辨析

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

REF

相關文章
相關標籤/搜索