实际上我已经编写了这段代码,但它不起作用。帮助我。
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;
}
}
}
答案 0 :(得分:4)
您的功能参数
unsigned short checkCollisionOrFood(unsigned short rowHead,unsigned short colHead)
隐藏同名的全局(文件范围,实际上)变量,因此在函数中,您只更改传递的参数的副本,这在函数外部没有任何影响。在该函数中,您无法访问阴影全局变量(没有一些体操)。
全局变量的要点是它们(也没有指向它们)不需要作为参数传递,因为它们可以在没有它的情况下被访问。
答案 1 :(得分:1)
当您将变量传递给function时,它们将按值传递。这意味着,该函数具有它自己的变量副本,您可以通过变量进行操作而无需修改已传递的初始变量。
如果要修改全局变量的值,则不应该使用具有相同名称或局部变量的参数。所以,你的函数应该是:
unsigned short checkCollisionOrFood();