在大多数情况下,更改变量的值时,我将使用(例如)int x = 100;
,但是在运行程序时,它并没有达到预期的效果,如果使用x = x + 100;
然后就可以了
我在if
语句中使用了此方法,而以前重新分配变量值的方法没有达到预期的效果。
void Game::ComposeFrame(){
int y = 200;
int x = 400;
int g = 0;
if (wnd.kbd.KeyIsPressed(VK_DOWN)) {
y = y + 150;
}
if (wnd.kbd.KeyIsPressed(VK_UP)) {
y = y - 150;
}
if (wnd.kbd.KeyIsPressed(VK_RIGHT)) {
x = x + 150;
}
if (wnd.kbd.KeyIsPressed(VK_LEFT)) {
x = x - 150;
}
if (wnd.kbd.KeyIsPressed(VK_SHIFT)) {
g = g + 100;
}
gfx.PutPixel(x + 1, y + 100, 100, g, g);
gfx.PutPixel(x + 2, y + 100, 100, g, g);
gfx.PutPixel(x + 3, y + 100, 100, g, g);
gfx.PutPixel(x + 4, y + 100, 100, g, g);
gfx.PutPixel(x + 5, y + 100, 100, g, g);
gfx.PutPixel(x + 1, y + 105, 100, g, g);
gfx.PutPixel(x + 2, y + 105, 100, g, g);
gfx.PutPixel(x + 3, y + 105, 100, g, g);
gfx.PutPixel(x + 4, y + 105, 100, g, g);
gfx.PutPixel(x + 5, y + 105, 100, g, g);
该程序的预期目的是,在运行时,应在屏幕上放置像素,并在按某些按钮时应在这些像素周围移动。使用int x = 100;
时,像素的位置不会改变,但是使用x = x + 100;
答案 0 :(得分:3)
我觉得有必要扩展其他答案...
int x = 100;
创建一个名为x
的新变量,该变量在封闭范围内“遮盖”(或隐藏)任何以前的变量x
。这意味着x
的原始值未修改(例如,当新的x
的作用域结束时)。
如果您想将x的当前值增加100,则应该使用x = x + 100;
(或等效的x += 100;
)。
现在,没有人提到过该部分:
在大多数情况下,更改变量值时,我将使用(例如)int x = 100;
这意味着您经常(几乎总是)使用这种不正确的阴影变量模式。因为具有多个具有相同名称的不同变量会造成混淆,即使正确使用它们也很容易导致意外行为。因此,您应该从不阴影变量。如果您需要这种行为,请使其名称稍有不同(例如x
和_x
等)。
为将来提供帮助,您可以使用-Wshadow
编译器标志在编译时针对所有此类事件发出警告(假设您使用的是gcc,clang或其任何分支)。
答案 1 :(得分:1)
int x = 100;
不会更改变量的值。它定义了一个具有给定初始值的全新变量。
答案 2 :(得分:1)
首先,使用$ cat airnow
resource "github_repository" "airnow" {
name = "airnow"
private = false
description = "Something"
has_wiki = "true"
has_downloads = "true"
has_issues = "true"
archived = "false"
}
定义一个整数,该整数保持100。
但是使用int x = 100
只是说您已经有一个名为x的整数(或某些变量),并且您只想将变量重新定义为x + 100。
答案 3 :(得分:0)
好吧,我想我找到了真正为我解答问题的答案。当我在if语句中重新定义变量时,它不起作用的原因是由于作用域。变量或任何信息的范围是包含在花括号中的变量。声明在花括号范围内的变量的信息仅在那些花括号中以这种方式存在。因此,当我将变量重新定义到不同的“较低”范围层时,该变量的信息将不会传递到该范围之外,除非您在不重新定义的情况下更改了现有变量。 x + = 100;不会将变量重新定义到较低的范围,而是会更改其值。