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

本文详细解释了C++编程中引用、指针及指针的指针的基本概念与操作,通过实例展示了如何通过引用和指针修改实参值,并介绍了指向指针的指针的概念。

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

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

众所周知,对于常规变量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

转载于:https://my.oschina.net/SnifferApache/blog/657256

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值