我正在进行一个操作系统项目,我想知道指针在内存中是如何存储的?我知道指针是4个字节,那么这4个字节是如何分配的呢?
我的问题是,我试图将一个指针存储到一个4字节的内存空间中。假设指针是0x7FFFFFFF。每个字节中存储了什么内容?
我正在进行一个操作系统项目,我想知道指针在内存中是如何存储的?我知道指针是4个字节,那么这4个字节是如何分配的呢?
我的问题是,我试图将一个指针存储到一个4字节的内存空间中。假设指针是0x7FFFFFFF。每个字节中存储了什么内容?
#include <stdio.h>
int main(int arc, char* argv[]) {
int *p = (int *) 0x12345678;
unsigned char *cp = (unsigned char *) &p;
int i;
for (i = 0; i < sizeof(p); i++)
printf("%d: %.2x\n", i, cp[i]);
return 0;
}
指针的存储方式与其他多字节值相同。这4个字节根据系统的字节序进行存储。假设这4个字节的地址如下:
大端(最高有效字节在前):
Address Byte
0x1000 0x7F
0x1001 0xFF
0x1002 0xFF
0x1003 0xFF
Address Byte
0x1000 0xFF
0x1001 0xFF
0x1002 0xFF
0x1003 0x7F
顺便提一下,4字节地址是32位系统,64位系统有8字节地址。
编辑: 要引用指针的每个单独部分,您需要使用指针。 :) 假设您有:
int i = 0;
int *pi = &i; // say pi == 0x7fffffff
int **ppi = π // from the above example, int ppi == 0x1000