C: 在特定内存位置访问 'char'?

标签 c memory memory-management

我有兴趣访问我分配的内存部分以更好地理解事物,假设我使用 mallocprintf("%p", &foo) 分配了 10 个字节 返回 0xff0a,我是否能够分配 0xff0a->0xff1a(目前我的十六进制数学很糟糕)并访问其中任何一个字节?

我想我记得使用过关键字 volatile 以及为此使用的内存地址,但我不确定该代码能够做什么..

我想我的意思是如何访问内存中的随机字节,转换为 char 或整数,我可以将其存储在指针中以供稍后访问。

最佳答案

我假设您想要访问多字节类型(例如 int 或 short)中的单个字节。常见的习惯用法是将地址转换为 char* 并像这样遵循:

#include <stdio.h>

int main(void)
{
    int foo = 0xDEADBEEF;
    int i;

    for (i = 0; i < 4; i++) {
        printf("byte %d of foo is x%02X\n", i, *((unsigned char*)&foo + i));
    }
    return 0;
}

输出

$ ./a.out
byte 0 of foo is xEF
byte 1 of foo is xBE
byte 2 of foo is xAD
byte 3 of foo is xDE

注意它向后看的原因是 x86 是小端

关于C: 在特定内存位置访问 'char'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4300591/

相关文章:

c - 使用 FFTW 取消定义架构 x86_64 的符号

c - 为什么 0x8000000000000000LL 被 gcc 认为是 unsigned long long?

c - 在 C 中打印带逗号的 float

c++ - 为什么不能释放堆栈上的变量?

C# 字符* 到字符串

C - 使用链表的自适应动态内存?

objective-c - 在 main() 中省略 @autoreleasepool { } 会产生什么后果?

swift - 委托(delegate)类从未发布

C 程序中的核心转储

iPhone:自动释放对象内存泄漏?