【问题标题】:Syntax for arrays as operands数组作为操作数的语法
【发布时间】:2013-03-09 13:39:50
【问题描述】:

将函数中未预定义的数组作为操作数传递的语法是什么?

比如我有这个功能:

void kilos(int percentage[2], char liquid[2][4]);

因此,如果我创建两个不同的数组并将它们作为操作数传递,那么一切都会正常工作。 如果我不想在调用函数之前创建数组,这将如何工作? 是分析操作数而不使用数组的唯一解决方案吗?

我想调用函数,但我想在调用函数时创建数组:

kilos(int percent[2]={40,60}, char liq[2][4]={'wate','milk'})

【问题讨论】:

  • 例如我有这个函数:void kgs(int percent[2],char liquid[2][4]);
  • “未预定义”是什么意思?你如何“分析操作数”?
  • 您是说您希望这些参数是可选的吗?
  • 我想调用函数,但我想在调用函数时创建数组,例如:kilos(int percent[2]={40,60},char liq[2][4 ]={'水','牛奶'})
  • 问题不清楚。您的意思是要接受 any 大小的数组吗? 我不想在调用函数之前创建数组是什么意思?你想在内部创建对象吗?

标签: c++ c eclipse optimization arduino


【解决方案1】:

你需要这样调用函数:

kilos((int[2]){40,60}, (char[2][4]){"wate", "milk"});

注意字符串文字周围的双引号。而且您可能需要第二个数组为 char[2][5] 以允许空终止符。

【讨论】:

    【解决方案2】:

    在 C++ 中,如果您有支持 C++11 的编译器并且使用 std::vector 而不是原始数组,则可以使用 initializer lists

     void kilos(const std::vector<int> percentage,
                const std::vector<std::string> liquid);
    
    // ...
    
    kilos({40, 60}, {"water", "milk"});
    

    【讨论】:

      【解决方案3】:

      将指针传递给函数等同于传递数组。指针可以指向静态分配的缓冲区或动态内存(例如 new []malloc)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-16
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        • 1970-01-01
        相关资源
        最近更新 更多