【问题标题】:Error passing 2D char* array into a function将 2D char* 数组传递给函数时出错
【发布时间】:2010-11-19 03:30:09
【问题描述】:

我正在尝试将 char* 的二维数组传递给函数。我收到此错误:

"cannot convert 'char* (*)[2]' to 'char***' for argument '1' to 'int foo(char***)'"

代码:

int foo(char*** hi)
{
    ...
}

int main()
{
    char* bar[10][10];
    return foo(bar);
}

【问题讨论】:

    标签: c++ arrays casting char


    【解决方案1】:

    现在是不是引入引用概念的时机不好?

    顺便说一句,我会说在调用方需要一个额外的“&”。话虽如此,这是一场危险的游戏。

    为什么要分配这个?为什么它在堆栈上?为什么要在接收函数中将它输入到 char*** 中?

    雅各布

    【讨论】:

      【解决方案2】:

      试试

      int foo(char* hi[10][10])
      {
      }
      
      int main()
      {
          char* bar[10][10];
          return foo(bar);
      }
      

      或者,使用引用、向量的向量或 boost::multi_array。

      【讨论】:

      • 我不想对 foo 使用静态数组大小。
      • @CookieOfFortune,请注意编译器不尊重第一个“10”。该参数的类型与我的答案相同。
      【解决方案3】:

      您的数组是10char* 数组的数组,每个数组都存储10char* 指针。

      这意味着当将它传递给参数不是引用的函数时,它会转换为pointer to an array of 10 char*。因此正确的函数参数类型是

      int foo(char* (*hi)[10])
      {
          ...
      }
      
      int main()
      {
          char* bar[10][10];
          return foo(bar);
      }
      

      进一步阅读 Stackoverflow 上的 Pet peeve 条目。

      【讨论】:

        【解决方案4】:

        如果数组的大小不会改变,最好在函数中使用对数组的引用。它更安全、更清洁。例如:

        int foo(char* (&hi)[10][10] )
        {
         int return_val = 0;
         //do something
         //hi[5][5] = 0;
         return return_val;
        }
        
        int main()
        {
            char* bar[10][10];
            return foo(bar);
        }
        

        【讨论】:

          猜你喜欢
          • 2020-06-26
          • 1970-01-01
          • 2018-12-02
          • 1970-01-01
          • 2012-05-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多