gpt4 book ai didi

c - 用指针存储的数据

转载 作者:行者123 更新时间:2023-11-30 15:29:45 25 4
gpt4 key购买 nike

void *memory;
unsigned int b=65535; //1111 1111 1111 1111 in binary
int i=0;

memory= &b;

for(i=0;i<100;i++){
printf("%d, %d, d\n", (char*)memory+i, *((unsigned int * )((char *) memory + i)));
}

我正在尝试理解一件事。

(char*)memory+i - print out adress in range 2686636 - 2686735.

当我使用内存= &b 存储 65535 时,应该将此数字存储在地址 2686636 和 2686637 处因为每个地址只有一个字节,所以有 8 个二进制字符,所以当我打印出来时

*((unsigned int * )((char *) memory + i)) this should print 2686636, 255 and 2686637, 255

取而代之的是打印 2686636、65535 和 2686637,随机数

我正在尝试实现内存分配。这是学校项目。这应该代表内存。一个地址应该是一个字节,因此 header 将为 2686636-2586639(4 字节表示 block 大小)和 2586640(1 字节字符表示空闲或已用内存标志)。谁能给我解释一下吗谢谢。

感谢您的回答。

void *memory;
void *abc;

abc=memory;
for(i=0;i<100;i++){
*(int*)abc=0;
abc++;
}

*(int*)memory=16777215;

for(i=0;i<100;i++){
printf("%p, %c, %d\n", (char*)memory+i, *((char *)memory +i), *((char *)memory +i));
}

输出为

0028FF94,  , -1
0028FF95,  , -1
0028FF96,  , -1
0028FF97, , 0
0028FF98, , 0
0028FF99, , 0
0028FF9A, , 0
0028FF9B, , 0

我认为它有效。 255只有1次-1,65535有2次-1,16777215有3次-1。

最佳答案

在你的程序中,b的地址似乎是2686636,当你写(char*)memory+i或(char*)&b+i时,这意味着这个指针指向char,所以当你向它加1时,它会仅跳转到一个内存地址,即 e2686637,依此类推,直到 2686735(即(char*)2686636+99)。

<小时/>

现在,当您取消引用时,即 *((unsigned int * )((char *) memory + i))) 您将获得该内存地址处的值,但您仅向 b 赋予了值(其地址是2686636).所有其他内存地址都有您正在打印的垃圾值。

<小时/>

所以首先你必须在其余地址(2686637 到 2686735)存储一些数据祝你好运..我希望这会有所帮助

关于c - 用指针存储的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26088415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com