在C中,如何读取地址前的内存块

时间:2013-03-14 04:27:09

标签: c pointers memory

给定一个struct对象或指向一个对象的指针,如何在对象之前读取x个字节的内存?例如,如果我知道对象从地址10开始,我怎样才能从地址10-x到地址9读取x个字节?谢谢。

2 个答案:

答案 0 :(得分:1)

Nitzan Shaked 在评论中所说,将指针强制转换为(char *),以便您可以在字节级别执行指针算术运算。然后执行指针运算(减去需要减去的字节数),然后将其强制转换为需要读取它的类型的指针。

答案 1 :(得分:1)

从任何地址读取字节很简单:只需将指针转换为char*,减去所需的字节数,然后开始读取,如下所示:

struct MyStruct {
    int x;
    int y;
} test[100];
...
void *ptr = &test[50];
...
char *start = (char*)prt;
start -= 10;
// You can read from the start pointer now

您需要确保您尝试阅读的内存对于您的应用程序来说是合法的。内存需要是静态或动态分配的更大结构的一部分。否则,它是未定义的行为,可能导致崩溃。