【发布时间】:2014-01-21 12:15:37
【问题描述】:
您好,今天我正在尝试清理我的代码,但我对指针和 memcpy 有点陌生。 我正在尝试做的是我可以做到的事情。
pos()->x = 500; 甚至 printf(pos->x)
到目前为止的代码 - 只读
struct vec3
{
float x, y, z;
};
vec3 client::pos()
{
vec3 vPos;
memcpy(&vPos, &(*(float *)(state() + 0x1C)), sizeof(vec3));
return vPos;
}
上述代码将正确返回 Z、Y 和 Z 线,但显然它不是指针,因此无法设置。
我真的不知道如何才能很好地从上述方法中逆转使用,而不是逆转,而是同时使用它,然后为此定义两种方法。
以下是我当前如何设置 pos 的示例
void client::setPos(float x, float y, float z)
{
vec3 vPos = {
x==NULL?pos().x:x,
y==NULL?pos().y:y,
z==NULL?pos().z:z
};
memcpy(&(*(float *)(state() + cordX)), &vPos, sizeof(vec3));
}
如何通过将我的第一个方法作为指针将这两种方法“绑定”为一个?
【问题讨论】:
-
您为什么不想保留您的代码? (如果 ABI 允许,编译器可能会玩指针技巧)
-
我不确定你所说的“保留你的代码”是什么意思,我的意思是我不想添加另一种方法来编写它。
-
为什么在 setPos 函数中检查 x、y 和 z 是否为 NULL?这些不是指针...
-
因为默认参数等于 NULL。如果未指定该线,则使用当前线设置。不开玩笑,他们并没有指出这篇文章的全部意义在于提出一个多合一的指针。
-
state() + 0x1C在我看来很可疑。你真的需要这样吗?状态是什么样的?