C中的更新(int)变量

我正在尝试编写一个在我的简单C蛇游戏中改变屏幕的function。

main(){ int stage = 0; ... .. . while(stage!=0){ //if snake hits wall changeStage(stage); } } 

function:

 void changeStage(int stage){ stage = 1; } 

此代码不会更新代码,它将继续运行。 我的代码出了什么问题?

stage通过value传递给changeStagestage = 1只更改changeStagestage的本地值,而不是mainstage的值。 你必须传递一个指针:

 while (stage != 0) { changeStage(&stage); } void changeStage(int *stage) { *stage = 1; } 

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’值的位置。 然后,该函数可以修改该位置中的内容。

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

进一步阅读

您没有修改原始stage变量,只修改changeStage函数中的本地副本

你需要使用一个指针:

 void changeStage(int* stage) { *stage = 1; } 

使用function:

 while (stage != 0) { // if snake hits wall changeStage(&stage); } 

您需要了解更多C语言的基本概念。 指针是C语言中非常重要的特性。

正确,如果你想改变main()中变量的值,你需要传递指针,或者你可以创建它作为全局变量,这样它可以在函数和main中访问。

 static int stage = 0; void changeStage(){ stage = 1; } main(){ int score = 0; ... .. . while(stage!=0){ //if snake hits wall changeStage(); } }