我试图在我简单的C蛇游戏中编写一个改变屏幕的功能。
main(){
int stage = 0;
...
..
.
while(stage!=0){
//if snake hits wall
changeStage(stage);
}
}
功能:
void changeStage(int stage){
stage = 1;
}
此代码不会更新代码,它会继续运行。 我的代码出了什么问题?
答案 0 :(得分:16)
stage
按值传递给changeStage
。 stage = 1
仅更改stage
中changeStage
的本地值,而不更改stage
中main
的值。你必须改为使用指针:
while (stage != 0) {
changeStage(&stage);
}
void changeStage(int *stage) {
*stage = 1;
}
答案 1 :(得分:7)
C是一种按值传递的语言。完成所需操作的最简单方法是将引用传递给您需要更改的变量。例如:
void changeStage(int *stage){
*stage = 1;
}
main(){
int score = 0;
int stage = 0;
...
..
.
while(stage!=0){
//if snake hits wall
changeStage(&stage);
}
}
注意:如果您刚开始使用C编程,可能需要阅读完全理解代码的指针。在示例代码中,您不是传递'stage'的值,而是传递存储'stage'值的位置。然后,该函数可以修改位置中的内容。
答案 2 :(得分:3)
C函数参数是按值传递的。这意味着您不是将引用传递给stage
,而是传递存储在其中的值。您在changeStage
函数中执行的更新仅适用于已创建的副本。
如果要更新另一个函数中的变量,则需要将指针传递给它。
void changeStage(int* stage_p){
*stage_p = 1;
}
int main() {
//...
while(stage!=0){
//if snake hits wall
changeStage(&stage);
}
}
&stage
表示取stage
的地址并将其传递给该函数。然后stage_p
参数将指向main中的int。
*stage_p
会导致它使用stage_p
指向的值,在您的案例中为主stage
。
答案 3 :(得分:3)
您不是要修改原始stage
变量,而是仅修改changeStage
函数中的本地副本。
您需要使用指针:
void changeStage(int* stage)
{
*stage = 1;
}
使用函数:
while (stage != 0)
{
// if snake hits wall
changeStage(&stage);
}
您需要了解更多C语言的基本概念。指针是C语言中非常重要的特性。
答案 4 :(得分:2)
正确,如果你想改变main()中变量的值,你需要传递指针,或者你可以创建它作为全局变量,这样它在函数和main中都可以访问。
static int stage = 0;
void changeStage(){
stage = 1;
}
main(){
int score = 0;
...
..
.
while(stage!=0){
//if snake hits wall
changeStage();
}
}