You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:一段C++指针运算程序的逻辑解析疑问

解析这个C++程序的输出逻辑

首先先把你提供的代码贴出来方便分析:

#include <iostream>
using namespace std;
int main() {
    int t[4] = { 8, 4, 2, 1 };
    int *p1 = t + 2, *p2 = p1 - 1;
    p1++;
    cout << *p1 - t[p1 - p2] << endl;
    return 0;
}

我来一步步拆解每一步的指针操作和计算逻辑,结合你给出的地址与对应值来解释:

  1. 数组与指针初始化

    • 数组t的元素分别是:t[0] = 8,t[1] = 4,t[2] = 2,t[3] = 1。
    • 初始时p1 = t + 2:t是数组首地址,t+2指向数组的第3个元素(下标从0开始),也就是t[2],对应值为2。
    • p2 = p1 - 1:指针减1会向前移动一个int元素的位置,所以p2指向t[1],对应值为4,和你给出的p2地址存储值一致。
  2. 指针自增操作

    • p1++:指针自增1,会向后移动一个int元素的位置,此时p1指向t[3],对应你给出的地址0x00000007c2affa24,存储的值是1。
  3. 关键表达式计算
    现在来看输出的核心表达式:*p1 - t[p1 - p2],这里要注意运算符优先级,先计算*p1和t[...],再做减法:

    • *p1:当前p1指向t[3],所以取值为1。
    • p1 - p2:指针相减的结果是两个指针之间的元素个数,不是字节数。你给出的p1地址是0x00000007c2affa24,p2是0x00000007c2affa1c,两者字节差是0x24 - 0x1c = 8,而int占4字节,所以元素个数是8 / 4 = 2,也就是p1 - p2 = 2。
    • t[p1 - p2]就是t[2],对应的值是2。
    • 最后计算1 - 2 = -1,这就是程序的输出结果。

内容的提问来源于stack exchange,提问作者Lavakusa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:26:11