【问题标题】:Pointer in function argument seems not working函数参数中的指针似乎不起作用
【发布时间】:2021-07-09 08:48:11
【问题描述】:

我正在使用 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;

没问题

但是当我在独立代理的getConfigFile()函数中返回时,文件变量是一个空指针,我不知道为什么。

是否有我缺少的 C++ 规范?

【问题讨论】:

  • 您的函数中没有 指针引用。指针引用将是char*& fileExample
  • 指针不应该在这里工作吗?
  • 如果您更改函数内部的指针,则该更改是函数的本地更改。您作为参数传递给函数的指针保持不变 - 除非您通过引用来获取它:char*& file
  • 参数是按值传递的,除非你通过引用传递。指针并不特别。 file = mConfigFile 修改是 getConfigFile 的局部变量
  • 您将指针的副本传递给函数,然后修改副本。所以它不会在函数之外可见。

标签: c++ function pointers reference composition


【解决方案1】:

函数的参数可以按值按引用传递。任何通过传递的变量都将是函数的本地变量,对其所做的任何更改也是函数的本地变量。这意味着当为指针(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;
}

【讨论】:

  • StandaloneAgent::getConfigFile 也是。但这一点应该得到理解。
  • @super 好点 - 最好说清楚。
猜你喜欢
  • 2012-01-03
  • 2012-03-14
  • 2014-03-20
  • 2018-08-11
  • 2015-06-29
  • 1970-01-01
  • 2022-12-03
  • 2021-03-06
  • 2015-04-26
相关资源
最近更新 更多