为何指向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
相关产品推荐
相关产品推荐

