【C语言】取值符&和间接值*辨析

独自空忆成欢 提交于 2020-03-01 23:08:00

计算机程序在存储数据时必须跟踪三种基本属性:

  • 数据是什么类型
  • 信息在存储器中的地址
  • 存储的是多少

众所周知,对于常规变量a,&a是存储地址,a是值。对于指针变量p,p是存储地址,*p则是值。下面通过一个例子来辨析取值符&间接值* (indirect value)

#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*)

所以我们要想在参数传递中修改实参的值,就要通过[1]中Exchg2 (int &x=a,int &y=b)或者Exchg3(int* x=&a,int* y=&b)。 明白这一点之后,指向指针的指针也好理解了。

REF

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!