函数参数中的指针似乎不起作用
Pointer in function argument seems not working
我正在用 C++ 开发。我有 2 个对象:StandaloneAgent 和 ConfigManager。
我希望独立代理通过函数 .
到达 ConfigManager 中的 char * 变量
int32_t StandaloneAgent::getConfigFile(char * file){
int32_t code = mConfigMgr->getConfigFile(file);
return code;
}
int32_t ConfigManager::getConfigFile(char * file){
file = mConfigFile;
return 0;
}
这里,ConfigManager对象是StandaloneAgent的一个属性,
ConfigManager * mConfigMgr;
变量。
我要访问的文件位于 ConfigManager 的 mConfigFile 属性中。
问题是:
同时输入 std::cout,
中的 mConfigFile 正常并且
之后的文件变量
file = mConfigFile;
可以
但是我return在standalone agent的getConfigFile()函数中,file变量是一个空指针,我也不知道为什么。
是否有我缺少的 C++ 规范?
函数的参数要么按值传递,要么按引用传递。 按值 传递的任何变量都将是函数的局部变量,对其所做的任何更改也是函数的局部变量。这意味着当为指针 (file = mConfigFile
) 分配一个新值时,您只需更改函数中的指针。您作为参数传递的指针不受影响。
当通过引用获取参数时,函数内部的变量引用用于调用函数的变量。对该变量所做的任何更改都将直接对函数调用中使用的变量进行更改。
在您的情况下,这意味着您需要更改 ConfigManager::getConfigFile
函数:
int32_t ConfigManager::getConfigFile(char*& file){
file = mConfigFile; // the change is made to the variable used as an argument
return 0;
}
如果传递给 StandaloneAgent::getConfigFile
的指针也应该更改(我假设是),您需要在那里进行相同的更改:
int32_t StandaloneAgent::getConfigFile(char*& file){
int32_t code = mConfigMgr->getConfigFile(file);
return code;
}
我正在用 C++ 开发。我有 2 个对象:StandaloneAgent 和 ConfigManager。 我希望独立代理通过函数 .
到达 ConfigManager 中的 char * 变量
int32_t StandaloneAgent::getConfigFile(char * file){
int32_t code = mConfigMgr->getConfigFile(file);
return code;
}
int32_t ConfigManager::getConfigFile(char * file){
file = mConfigFile;
return 0;
}
这里,ConfigManager对象是StandaloneAgent的一个属性,
ConfigManager * mConfigMgr;
变量。
我要访问的文件位于 ConfigManager 的 mConfigFile 属性中。
问题是:
同时输入 std::cout, 中的 mConfigFile 正常并且
之后的文件变量file = mConfigFile;
可以
但是我return在standalone agent的getConfigFile()函数中,file变量是一个空指针,我也不知道为什么。
是否有我缺少的 C++ 规范?
函数的参数要么按值传递,要么按引用传递。 按值 传递的任何变量都将是函数的局部变量,对其所做的任何更改也是函数的局部变量。这意味着当为指针 (file = mConfigFile
) 分配一个新值时,您只需更改函数中的指针。您作为参数传递的指针不受影响。
当通过引用获取参数时,函数内部的变量引用用于调用函数的变量。对该变量所做的任何更改都将直接对函数调用中使用的变量进行更改。
在您的情况下,这意味着您需要更改 ConfigManager::getConfigFile
函数:
int32_t ConfigManager::getConfigFile(char*& file){
file = mConfigFile; // the change is made to the variable used as an argument
return 0;
}
如果传递给 StandaloneAgent::getConfigFile
的指针也应该更改(我假设是),您需要在那里进行相同的更改:
int32_t StandaloneAgent::getConfigFile(char*& file){
int32_t code = mConfigMgr->getConfigFile(file);
return code;
}