在C代码中被奇怪的行为所困惑

时间:2012-11-06 17:43:57

标签: c

考虑以下C代码:

struct ScoredGamestate
{
    GameState88 gameState;
    int whitePlayerScore; 
};

int bestScore;

assert(scoredState->whitePlayerScore > -1000 && 
scoredState->whitePlayerScore < 1000);

if (scoredState->gameState.playerOnMove == PlayerWhite)
{
    bestScore = scoredState->whitePlayerScore;
}
else
{
    bestScore -(scoredState->whitePlayerScore);
}

assert(bestScore > -1000 && bestScore < 1000);

合乎逻辑的是,在代码之后,bestScore总是+/-“whitePlayerScore”

但是我的调试器(visual studio 2010 C ++ express edition)会发生什么, “whitePlayerScore”为50,但bestScore变得像-8908234

(第一个断言永远不会发射,但总是第二个断言)

这怎么可能发生?

2 个答案:

答案 0 :(得分:4)

好吧,这个

bestScore -(scoredState->whitePlayerScore);

似乎缺少=个字符。我猜你打算做作业

bestScore = -scoredState->whitePlayerScore;

但是你使用了一些无意义的减法和废弃的结果。大多数编译器实际上会发出关于没有副作用的表达式语句的警告。你不是吗?

答案 1 :(得分:2)

你有错误的行

bestScore -(scoredState->whitePlayerScore);

应该是

  

bestScore =(scoredState-&gt; whitePlayerScore);

这就是为什么你有未初始化(或初始化为垃圾值)的值int bestScore;,在你的情况下在调试器中看到

  

-8908234