可变地址会因我们是否使用它而改变?

有人能解释一下吗?

考虑一下这个程序。我们写修改 dest[10] 故意看 j 修改后的值。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char source[] = "Hello";
    int j = 100;
    char dest[10];
    dest[12] = 'A';
    printf("j   = %d \n", j);
    fflush(stdout);
    printf("j   = %d \n", j);
    fflush(stdout);
    printf("*j   = %p \n", &j);   // comment this line to get another result!
    return 0;
}

输出。

j   = 4259940
j   = 4259940
*j   = 0x7ffcc4cdef74

但如果我们在显示 j 瓦里巴利地址 printf("*j = %p \n", &j); 我们得到。

j   = 100
j   = 100

这就像 j 储存在其他地方,而不仅仅是在 dest 和第一个例子中的变量一样。

有没有人可以解释一下?

解决方案:

对象的存放位置和是否存放 jdest 中如何处理界外访问的问题。dest[10] 是编译器的选择。现代编译器会做很多复杂的事情来优化程序。当你省略了打印地址的语句时。j,编译器会做出不同的选择,这些选择会产生不同的结果。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

如何使用vscode python调试器来调试用bazel构建的项目?

2022-4-20 2:00:12

解决方案

如何让我的Python密码破解器更高效的运行?

2022-4-20 3:00:07

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索