面试---指针与地址

本文探讨了C语言中使用指针计算数组偏移量与访问数组元素的过程,通过具体实例展示了指针q-p的实际运算结果与预期结果之间的差异,并详细解释了其背后的原理。

以下程序中a[q-p] 运行结果?

#include <iostream>
using namespace std;
int main()
{
    int a[3]={0,1,2};
    int *p, *q;
    p = a;
    q = &a[2];
    cout<<p<<endl;
    cout<<q<<endl;
    cout<<q-p<<endl;// q-p的实际运算是(q地址值 - p地址值)/sizeof(int) = 8/4=2
    cout <<a[q-p] <<endl;
    return 0;
}

结果:

0x28fefc
0x28ff04 //16进制地址值直接运算的结果是8!!!但是指针q-p运算得2!!!
2
2

Process returned 0 (0x0)   execution time : 0.129 s
Press any key to continue.

0x28fefc - 0x28ff04 = 0x08(16进制),相差是8

q-p的实际运算是(q地址值 - p地址值)/sizeof(int) = 8/4=2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值