我做错了什么,消息框中的值是不同的。这是在Windows上的32位应用程序。我读过的所有内容都表明,重新解释广播并不是必要的,即使我尝试它仍然无法奏效。还试过更大的数据类型来保存指针,但在32位int或DWORD上应该没问题。
var objects_json = JsonConvert.DeserializeObject<List<object>>(test);
答案 0 :(得分:2)
您正在显示两个不同变量的地址,a_ptr和a_recasted_ptr。它们不在同一地址存储器中
移除&
电话中的snprintf()
,您就完成了。
但是,代码很糟糕...... 试试这个:
A a;
A* a_ptr=&a;
SIZE_T a_ptr_address = (SIZE_T)a_ptr;
A* a_recasted_ptr = (A*)a_ptr_address;
//Display Result
char debugString[20];
snprintf(debugString, 20, "%0p", a_ptr);
MessageBoxA(NULL, debugString, NULL, NULL);
snprintf(debugString, 20, "%0p", a_recasted_ptr);
MessageBoxA(NULL, debugString, NULL, NULL);
答案 1 :(得分:-1)
将MessageBox替换为MessageBoxA并删除(const char *)强制转换。
在此示例中,您有3个不同的变量:a_ptr,a_ptr_address和a_recasted_ptr。 由于您有3个变量,因此它们具有不同的地址,因为它们是不同的变量。但是,它们的价值可以相同。 例如,a_ptr和a_recasted_ptr具有不同的地址,但具有相同的值。 在您的示例中,您显示变量的地址,但不显示其值。
修正了可能的版本:
struct A {};
// assign some dummy value to a_ptr
A* a_ptr = (A*)0x00000007;
DWORD_PTR a_ptr_address = (DWORD_PTR)a_ptr;
A* a_recasted_ptr = (A*)a_ptr_address;
//Display Result
char debugString[40];
sprintf_s(debugString, "Value of %08x=%u", &a_ptr, (DWORD_PTR)a_ptr);
MessageBoxA(NULL, debugString, NULL, NULL);
sprintf_s(debugString, "Value of %08x=%u", &a_recasted_ptr, (DWORD_PTR)a_recasted_ptr);
MessageBoxA(NULL, debugString, NULL, NULL);
编辑:根据评论修复错误