gpt4 book ai didi

c++ - void *地址的int *值

转载 作者:行者123 更新时间:2023-12-02 10:07:32 26 4
gpt4 key购买 nike

因此,我在弄乱指针,并且对某些事情感到困惑。首先,让我从一个基本示例开始,其行为类似于预期:

void* h = new char[16] {}; //pointer to a array of char, 16 bytes, and initilizes with 0
int* o = (int*)h; //gets the adress of the first byte
*o = 16; //sets the value
std::cout << *(int*)h << std::endl; //Prints the memory value
std::cout << *o; //Prints the memory value

并打印此:
16
16

但这并没有输出我认为的结果:
    int* o = (int*)h+1; //gets the adress of the second byte
*o = 16; //sets the value
std::cout << *(int*)h+1 << std::endl; //Prints the memory value
std::cout << *o; //Prints the memory value

但是它输出:
1
16

这两个数字不应该是16吗?
据我所知,通过向指针添加值,它以字节为单位增加了内存。那么,我在这里缺少什么吗?

最佳答案

您对运算符的优先级有疑问。在所有运算符中,使用的优先级最高的是对(int*)的强制转换。因此,当您执行(int*)h+1时,您实际上是在进行((int*)h)+1,这不是指向第二个字节的指针,而是指向第二个整数的指针,也就是说,您正在推进sizeof(int)字节。

*(int*)h+1类似,您实际上是在做(*(int*)h)+1,也就是说,您正在读取第一个整数(即0)并将1加到该整数(0 + 1 = 1)。在这种情况下,您不需要执行指针运算。

如果要进行适当的指针算术运算,则需要一些括号,但请注意,您不能随便用void *进行指针算术运算:请改用char *

关于c++ - void *地址的int *值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59436975/

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