我正在尝试编写一个在我的简单C蛇游戏中改变屏幕的功能.
main(){
int stage = 0;
...
..
.
while(stage!=0){
//if snake hits wall
changeStage(stage);
}
}
Run Code Online (Sandbox Code Playgroud)
功能:
void changeStage(int stage){
stage = 1;
}
Run Code Online (Sandbox Code Playgroud)
此代码不会更新代码,它将继续运行.我的代码出了什么问题?
uni*_*rio 16
stage通过值传递给changeStage.stage = 1只改变局部值stage中changeStage,而不是价值stage的main.你必须传递一个指针:
while (stage != 0) {
changeStage(&stage);
}
void changeStage(int *stage) {
*stage = 1;
}
Run Code Online (Sandbox Code Playgroud)
C是一种按值传递的语言.完成所需操作的最简单方法是将引用传递给您需要更改的变量.例如:
void changeStage(int *stage){
*stage = 1;
}
main(){
int score = 0;
int stage = 0;
...
..
.
while(stage!=0){
//if snake hits wall
changeStage(&stage);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:如果您刚开始使用C编程,可能需要阅读指针以完全理解代码.在示例代码中,您不是传递'stage'的值,而是传递存储'stage'值的位置.然后,该函数可以修改该位置中的内容.
C 函数参数是按值传递的。这意味着您不是传递引用,而是传递存储stage在其中的值。然后,您在函数中执行的更新changeStage仅适用于已制作的副本。
如果要更新另一个函数中的变量,则需要传递一个指向它的指针。
void changeStage(int* stage_p){
*stage_p = 1;
}
int main() {
//...
while(stage!=0){
//if snake hits wall
changeStage(&stage);
}
}
Run Code Online (Sandbox Code Playgroud)
&stage表示获取地址stage并将其传递给函数。然后参数stage_p将指向 main 中的 int 。
*stage_p导致它使用 指向的值stage_p,stage在您的情况下该值位于 main 中。