gpt4 book ai didi

c++ - 打印结构对象的地址

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:02 26 4
gpt4 key购买 nike

我有一个像这样的结构

typedef struct _somestruct {
int a;
int b;
}SOMESTRUCT,*LPSOMESTRUCT;

我正在为 struct 创建一个对象并尝试像这样打印它的地址

int main()
{
LPSOMESTRUCT val = (LPSOMESTRUCT)malloc(sizeof(SOMESTRUCT));

printf("0%x\n", val);

return 0;
}

..我收到这个警告

warning C4313: 'printf' : '%x' in format string conflicts with argument 1 of type 'LPSOMESTRUCT'

所以,我尝试像这样将地址转换为 int

printf("0%x\n", static_cast<int>(val));

但是我得到这个错误:

error C2440: 'static_cast' : cannot convert from 'LPSOMESTRUCT' to 'int'

我在这里错过了什么?如何避免此警告?

谢谢。

最佳答案

%x 需要一个无符号的。你正在打印的是一个指针。要正确地做到这一点,您通常需要使用 %p。严格来说,它需要一个指向 void 的指针,因此您需要对其进行强制转换:

printf("%p\n", (void *)val);

实际上,大多数当前实现对所有指针都使用相同的格式,在这种情况下,转换将是空洞的。当然,考虑到 C++ 标记,您所包含的大部分代码充其量都会变得有问题(除了 LPSOMESTRUCT 之类的部分,无论如何都是有问题的)。在 C++ 中,您通常需要更像的东西:

struct somestruct { 
int a;
int b;
};

somestruct *val = new somestruct; // even this is questionable.

std::cout << val;

关于c++ - 打印结构对象的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3035455/

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