【问题标题】:Why doesn't pointers change the value until function stops working?为什么指针在函数停止工作之前不会改变值?
【发布时间】:2022-01-01 10:48:48
【问题描述】:

所以我正在使用数组编写一个蛇游戏,我必须更改行和列的值,而不是创建副本,因此我使用的是指针。

void pointerset(int *rowPtr,int *colPtr){
*rowPtr=rand()%25;
*colPtr=rand()%64;
}
void create_snake(int *rowPtr,int *colPtr,int row,int column,int x){

pointerset(rowPtr,colPtr);

printf("%d %d",row,column);

if(board[row][column]==1){
  create_snake(rowPtr,colPtr,row,column,x);

}else if(board[row][column]==0){
    board[row][column]=x;

}else{
    create_snake(rowPtr,colPtr,row,column,x);
}

}
int main(){

int row=0,column=0;

int *rowPtr;
   rowPtr=&row;
int *colPtr;
   colPtr=&column;
create_snake(rowPtr,colPtr,row,column,x);
}

我需要更改这些变量的值,并检查它们是否在我想要的位置。我有一个功能可以在游戏板上创建我的蛇。

创建snake函数在这里,行和列也有参数,这样我就可以在数组上使用它们并进行检查,但我也使用了指针,所以我会在之前更改行和列的值使用实际的行和列

为了给行和列提供随机数,还有另一个函数。

我试图查看变量值的变化,因此我使用了一个

printf("%d %d",row,column);

当我在函数 create_snake() 中使用它时,它给我 0 0 用于行和列,当我在 main 函数 create_snake() 下使用这个 printf 时,在函数工作和停止后,它给我随机数 i'我创建了,而不是 0 0,但我需要它们在函数工作时进行更改。我根本无法解决使用指针失败的地方。

我创建了函数pointerset(),因为如果我只是在写作

*rowPtr=rand()%25;
*colPtr=rand()%64;

到函数 create_snake() 它不起作用。

【问题讨论】:

  • 函数的rowcol 参数是原始值的副本,但通过指针访问它们会获取或设置原始值 i> 价值观。所以在函数中,board[row][column] 仍然是board[0][0]
  • 那我该如何改变这种情况呢? @WeatherVane
  • 你需要改变你的算法
  • 我不明白你为什么将rowcolumn 传递给函数以及指向它们的指针。您可以从函数中删除 rowcolumn 参数,并使用 *rowPtr*colPtr
  • 你的意思是你不能用board[*rowPtr][*colPtr]索引数组?在算法方面,我认为您应该在做任何其他事情之前首先确定棋盘大小。这是一个纠结。

标签: arrays c pointers


【解决方案1】:

所以事情就是这样, *rowPtr 获取指针的整数值,而 rowPTr 没有(我猜是给内存地址?我不确定)

我删除了名为rowcolumn 的函数中的参数,而是将指针用于所有内容。

我以为我不能使用指针来检查我的板子,这是一个数组作为他们的索引,但我可以简单地输入 board[*rowPtr][*colPtr] 并且它有效,我在写时没有星号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    相关资源
    最近更新 更多