【问题标题】:How to access , change and print a variable by its memory adress in c?如何通过 c 中的内存地址访问、更改和打印变量?
【发布时间】:2020-09-02 19:02:20
【问题描述】:

假设我有一个整数变量 (var),它的内存地址是 1234f,但我不知道这个变量的名称,我想看看内存地址 1234f 有什么值,然后打印出来或更改 。有没有办法在 c 中做到这一点?

【问题讨论】:

    标签: c variables memory memory-address


    【解决方案1】:

    如何通过c中的内存地址访问、更改和打印变量?

    假设地址值有效:

    首先创建一个int *

    int *var_pointer = (int *) 0x1234f;
    printf("%d\n", *var_pointer);
    *var_pointer = 42;
    printf("%d\n", *var_pointer);
    

    如果地址无效,则结果为未定义行为 (UB)。

    【讨论】:

    • 你为什么这样做 (int *) 1234f;而不是 int *var_pointer = (int *) 1234f;
    • 1234f 必须是 0x1234f
    • @JCWasmx86 是的。帖子已修改。
    • 这是实现定义的。来自 C 标准:整数可以转换为任何指针类型。除非前面指定,结果是实现定义的,可能没有正确对齐,可能不指向引用类型的实体,并且可能是陷阱表示。)
    • @N.Dogac 从intint * 的转换是根据您的comment实现定义的。 *var_pointer 中的取消引用可能会由于未对齐等原因导致 UB。
    猜你喜欢
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 2016-10-10
    • 1970-01-01
    • 2013-04-30
    • 2010-10-09
    • 1970-01-01
    相关资源
    最近更新 更多