C语言中 主函数 连续两个变量 地址是连续的吗?

mosepplin mosepplin 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

08 指针运算符加减举例1_哔哩哔哩_bilibili

看这个老师的视频

#include <stdio.h>

int main()
{
	int a = 0x12345678;
	int b = 0x99991199;

	int *p1 = &b;
	char *p2 = (char*)&b;

	printf("the p1-1 is %x, %x, %x\n", *(p1-1), p1[-1], *p1+1);
	printf("the p2+1 is %x\n", p2[1]);

}

提到a和b的地址是连续的,而且 a高 b低。

在ubuntu上试了下,确实是的,运行结果如下:

但是在WIN11 64位系统下,却是这样的:

后来我再在Ubuntu上测试,发现又变了

p1+1没有读出a的值,然后我改了下 p1+1 改成 p1-1:

printf("the p1-1 is %x, %x, %x\n", *(p1-1), p1[1], *p1+1);

结果是:

 

 显然变成了a 是比b的地址低的。

打印出的地址是:

 

很遗憾,因为无法再复现之前*(p1+1)能打印出a的情况,所以没有地址比对,不过也算能说明问题了。

我就想知道,这个到底是什么规则,如果说两个不同的系统,编译器不一样,规则不一样也就算了。为什么同一个系统/编译器,两次结果不一样啊。

哪位前辈可以帮忙解释一下吗

...全文
评论 4
收藏 已收藏
分享
返回顶部
mosepplin
C++ 语言 65,214 成员 250,514 内容