如果在函数中更新全局变量的值会更改吗?

时间:2013-06-22 20:24:41

标签: c function global-variables

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

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;
          } 
          }
}

2 个答案:

答案 0 :(得分:4)

您的功能参数

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

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

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

答案 1 :(得分:1)

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

如果要修改全局变量的值,则不应该使用具有相同名称或局部变量的参数。所以,你的函数应该是:

unsigned short checkCollisionOrFood();