通过另一个C++函数更改函数变量
Changing a functions variable through another C++ function
我刚开始乱搞C++但我被卡住了。任何帮助将不胜感激。
我想通过传入另一个函数将 gameState 的值从true
更改为false
,但是,我的思维过程似乎不正确:
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
using namespace std;
void changeState(bool gameState){
string answer;
cout << "End game? Y/N" << endl;
cin >> answer;
if(answer == "Y"){
gameState = false;
} else if (answer == "N"){
gameState = true;
}
}
void gameLoop(){
bool gameState = true;
while(gameState == true){
cout << "Game is being played" << endl;
changeState(gameState);
}
}
int main(){
gameLoop();
return 0;
}
默认情况下,函数参数"按值"传递给 c/c++ 函数。这意味着该函数具有自己的游戏状态变量的本地副本,该副本初始化为调用方给出的值。
您有两种可能性:更改函数以引用变量或改为获取指向变量的指针。
采用引用的函数如下所示:
void ChangeState (bool &gameState){
gameState=false;
}
使用指针将如下所示:
void ChangeState (bool *gameState){
*gameState=false;
}
....ChangeState (&gameState);
使用引用可以被视为更方便,因为语法和局部变量的使用不会改变。另一方面,使用指针强制调用者使用 & 获取变量的地址,因此查看函数调用的每个人都知道该值可能会在函数内部更改。
在 c++ 中,当您将参数传递给函数时,通常会传递该值的副本,这意味着它只是该变量包含的内容的副本,而不是该变量。 为了创建输出参数,一个简单的解决方案是通过引用或指针传递。
我将展示参考版本:
void changeState(bool& gameState){
string answer;
cout << "End game? Y/N" << endl;
cin >> answer;
if(answer == "Y"){
gameState = false;
} else if (answer == "N"){
gameState = true;
}
}
代码完全相同,唯一的区别是参数列表中布尔值之后的 &。
本教程将更详细地介绍: http://www.cplusplus.com/doc/tutorial/functions/
此外,仅供参考,一个引用或指针,具体取决于操作系统,可以是 4 个字节,其中您的布尔值通常是 1 个字节,仅返回布尔值将比通过引用传递占用更少的内存。
返回按值传递的gameState
变量,无需在代码中通过引用或指针传递,这可能会导致隐藏行为,
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
using namespace std;
bool changeState(bool gameState){
string answer;
cout << "End game? Y/N" << endl;
cin >> answer;
if(answer == "Y"){
gameState = false;
} else if (answer == "N"){
gameState = true;
}
return gameState;
}
void gameLoop(){
bool gameState = true;
while(gameState == true){
cout << "Game is being played" << endl;
gameState = changeState(gameState);
}
}
int main(){
gameLoop();
return 0;
}
相关文章:
- 未使用的C++未优化的静态成员函数/变量
- 内联函数/变量的外部链接
- 同一函数中的静态函数变量初始化顺序
- 将非静态成员函数C 的使用无效,而将成员功能作为函数变量
- 如何从doxygen输出中排除类的无证件成员函数/变量
- 如何在LUA C API中分配全局LUA函数变量
- 如何将函数变量传递给C lambda函数
- 通过另一个C++函数更改函数变量
- c++11 lambda 真的支持闭包吗?函数变量中存在语义冲突
- C++:静态成员不能在声明时定义,但静态函数变量可以?
- apache-frift是否支持函数变量作为参数
- 类函数/变量在使用之前必须声明
- 函数变量去哪里
- 无法使用函数变量?错误表达式必须具有类类型
- 如何在main中使用函数变量
- 每当尝试打印函数变量时,C++ cout 错误
- 是否存在查看成员函数/变量的整洁等效项
- 访问友元类之间的函数变量
- 函数到函数变量
- 一个定义规则是否强制创建一个静态函数变量