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传递给changeStage
。 stage = 1
只更改changeStage
中stage
的本地值,而不是main
中stage
的值。 你必须传递一个指针:
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(); } }