【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

相关文章
相关标签/搜索