gpt4 book ai didi

c - 指针偏移量在 memset 中不起作用?

转载 作者:太空狗 更新时间:2023-10-29 15:55:42 25 4
gpt4 key购买 nike

纯 C,在 Windows 7 和 HP 机器上。

int main(void) {

unsigned int a = 4294967295;
unsigned int *b = &a;

printf("before val: '%u'\n", *b); // expect 4294967295, got 4294967295

memset(b+2, 0, 1);

printf("after val: '%u'\n", *b);
// little endian 4th 3rd 2nd 1st
// expect 4278255615 - 11111111 00000000 11111111 11111111
// got 4294967295 - 11111111 11111111 11111111 11111111

return 0;

}

我想将整数的第三个字节设置为 0x0,但保持不变。有任何想法吗?谢谢。

在我的机器上,int 是 32 位。

最佳答案

指针加法/减法不会只移动一个字节——它会移动所指向对象类型的大小。

也就是说(假设是4字节整数),

int *p = 0x00004
int *q = p+1;
assert(q == 0x00008)

基本上,这与使用运算符的索引相同:

int *q = &p[1]

如果您想将指针递增 1,请将其转换为 unsigned char *。您这样做的方式是覆盖不属于变量 a 的内存,并可能覆盖其他内容的现有数据。

关于c - 指针偏移量在 memset 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10554260/

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