将const uint *的值复制到c中的另一个变量

我想我有一个普遍的问题.

我目前正在学习C和SDL 2.0. SDL提供了一个函数,该函数返回指向包含所有键状态的const uint *的指针.

这些是我想要使用的变量:

const Uint8* oldKeyState;
const Uint8* currentKeyState;

在我的input.cpp的构造中:

currentKeyState = SDL_GetKeyboardState(&this->length);
    oldKeyState =  currentKeyState;

在Update()方法中我使用:

oldKeyState = currentKeyState;
currentKeyState = SDL_GetKeyboardState(NULL);

但是,我不是复制最后的值,而是给出一个指向oldKeyState的指针,而oldKeyState又指向当前的keystates.

那么如何将变量指针中的实际值复制到当前和旧的keystate呢?我不希望指针在我的旧密钥状态中,因为我无法检查先前的状态是否为UP且新状态是否为DOWN.

解决方法

在这里遇到的问题是你试图将指针复制到一个永远不会改变的const数组.因此,您将看到两个指针都转到相同的内存地址,并且您永远不会有两个输入状态副本,它允许您检查按下的键.

相反,您应该使用memcpy一个数组复制到另一个数组.但是为了做到这一点,你应该将oldKeyState的类型改为Uint8 *,否则你会因为复制到const数组而出错.

所以,代码应该像这样结束:

const Uint8 * currentKeyState;
Uint8 * oldKeyState;

...

//Constructor
currentKeyState = SDL_GetKeyboardState(&this->length);
oldKeyState = new Uint8[this->length];

...

//Input update
memcpy(oldKeyState,currentKeyState,this->length);
SDL_PumpEvents(); //copy the array before calling PumpEvents()!
currentKeyState = SDL_GetKeyboardState(NULL);

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...