calm27 Asked:2020-04-11 04:51:34 +0800 CST2020-04-11 04:51:34 +0800 CST 2020-04-11 04:51:34 +0800 CST bool 数组和语句 C++ [关闭] 772 为什么我要进入这个if? bool* keys[256]; for(auto key : keys) { key = false; } if (keys[GLFW_KEY_W]) // GLFW_KEY_W = 64 { std::cout << "I'm inside if" << std::endl; std::cout << keys[GLFW_KEY_W]; position += front * velocity; } 如果我在里面 240 如何理解keys[GLFW_KEY_W]返回我的内容,我如何理解索引并同时进入内部if?为什么我在里面? UPD c++ 2 个回答 Voted HolyBlackCat 2020-04-11T05:52:56+08:002020-04-11T05:52:56+08:00 在循环for(auto key : keys)中,变量key是下一个数组元素的副本。 key = false;更改此副本,并且数组本身不受更改的影响。 试试for(auto &key : keys)。 严格来说,key = false;它不应该编译。bool在 C++中没有从指针到指针的隐式转换。 最好写key = 0;或key = nullptr;。 keys[GLFW_KEY_W]以我了解索引的方式返回我 这是一个未初始化的指针。 Best Answer AnT stands with Russia 2020-04-11T05:53:24+08:002020-04-11T05:53:24+08:00 你的周期 for(auto key : keys) { key = false; } 什么也不做。如果要key = false;修改数组元素,key必须是引用 for(auto &key : keys) { key = false; } 但是,从 C++11 开始,文字false不再是有效的空指针常量,即 key = false在任何情况下都是无效代码。
在循环
for(auto key : keys)
中,变量key
是下一个数组元素的副本。key = false;
更改此副本,并且数组本身不受更改的影响。试试
for(auto &key : keys)
。严格来说,
key = false;
它不应该编译。bool
在 C++中没有从指针到指针的隐式转换。最好写
key = 0;
或key = nullptr;
。这是一个未初始化的指针。
你的周期
什么也不做。如果要
key = false;
修改数组元素,key
必须是引用但是,从 C++11 开始,文字
false
不再是有效的空指针常量,即key = false
在任何情况下都是无效代码。