0

实际上我已经编写了这段代码,但它不起作用。请帮帮我。

unsigned short checkCollisionOrFood(unsigned short rowHead,unsigned short colHead)
/*this the functionother then main function where i am changing value of "rowHead",but on checking it remain same*/
{
if(turn==0){
    if(address[colHead]&(1<<((rowHead+1)%8))){
        if(((int)(address[(colHead+7)%8]&(1<<(rowHead+1)%8))
           +(int)(address[colHead]&    (1<<(rowHead+2)%8))
           +(int)(address[(colHead+1)%8]&(1<<(rowHead+1)%8)))>1) return -1;
        else{
            rowHead=(rowHead+1)%8;//this value of rowHead is not getting change.
            return 1;
            } 
        } 
    }

变量 "turn","rowHead","colHead" 是全局变量。现在按照 Daniel Fischer 的指令修改此代码后,它是

unsigned short checkCollisionOrFood()
{
if(turn==0){
    if(address[colHead]&(1<<((rowHead+1)%8))){
    if(((int)(address[(colHead+7)%8]&(1<<(rowHead+1)%8))
    +(int)(address[colHead]&(1<<(rowHead+2)%8))
    +(int)(address[(colHead+1)%8]&(1<<(rowHead+1)%8)))>1) return -1;
      else{
          rowHead=(rowHead+1)%8;
          return 1;
          } 
          }
}
4

2 回答 2

4

你的函数参数

unsigned short checkCollisionOrFood(unsigned short rowHead,unsigned short colHead)

隐藏同名的全局(实际上是文件范围)变量,因此在函数中,您只需更改传递参数的副本,这在函数之外没有任何影响。在函数中,您无法访问阴影全局变量(没有一些体操)。

全局变量的要点是它们(也不是指向它们的指针)不需要作为参数传递,因为没有它就可以访问它们。

于 2013-06-22T20:27:25.533 回答
1

当您将变量传递给函数时,它们是按值传递的。这意味着,该函数有它自己的变量副本,您可以通过变量操作而不修改传递的初始变量。

如果要修改全局变量的值,不应该有同名的参数或局部变量。所以,你的功能应该是:

unsigned short checkCollisionOrFood();
于 2013-06-22T20:31:55.223 回答