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

为何指向4元素int数组的指针增量不符合预期?

数组指针自增后地址增量不符合预期的原因

你的代码

int arr[]={2,3,5,7};
int (*p)[4];
p=&arr;
cout<<p<<endl;
p++;
cout<<p<<endl;

实际运行输出

0x7ffe789ed080
0x7ffe789ed090

你的预期输出

0x7ffe789ed080
0x7ffe789ed096

问题核心是进制转换的计算错误:

  • int (*p)[4]是指向「包含4个int元素的数组」的指针,这类指针自增时,偏移量等于它指向的数组总字节大小,这部分你的理解是对的。
  • 你的数组arr总大小是4*4=16字节,而16的十六进制表示是0x10,不是0x16。
  • 初始地址0x7ffe789ed080加上0x10,结果正好是0x7ffe789ed090,和实际输出完全匹配。
  • 你预期的0x7ffe789ed096是初始地址加了十进制的22,这是把十进制的16错误当成了十六进制的0x16(对应十进制22),属于进制概念混淆。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:54:24