C++ (C/C+;+;)在同一行中初始化并返回数组

C++ (C/C+;+;)在同一行中初始化并返回数组,c++,arrays,c,casting,return,C++,Arrays,C,Casting,Return,我想知道如何使用c/c++在同一行上初始化和返回数组 我的直觉告诉我语法应该是这样的:return(int8_t*){hours,minutes,seconds} 我说得对吗?演员阵容是强制性的吗?还是有其他/更好的方法 编辑:我问这个问题是因为我现在无法测试代码。我有几天不会面对电脑了 回答: 对于C,请遵循验证答案中的步骤 对于C++,你将使用 STD::vector < /COD>或 STD::数组< /C>作为返回类型,然后有返回{ 1, 2,…,n}; 这不会像您预期的那样起作用 您

我想知道如何使用c/c++在同一行上初始化和返回数组

我的直觉告诉我语法应该是这样的:
return(int8_t*){hours,minutes,seconds}

我说得对吗?演员阵容是强制性的吗?还是有其他/更好的方法

编辑:我问这个问题是因为我现在无法测试代码。我有几天不会面对电脑了

回答:

  • 对于C,请遵循验证答案中的步骤
  • 对于C++,你将使用<代码> STD::vector < /COD>或<代码> STD::数组< /C>作为返回类型,然后有<代码>返回{ 1, 2,…,n};<代码>

    • 这不会像您预期的那样起作用

      您尝试执行的确切语法是:

      return (int8_t []){hours, minutes, seconds};
      
      它创建数组类型的复合文本。但是,此文本具有封闭范围的生存期。因此,当函数返回时,返回的指针现在指向无效内存,并试图取消对该指针调用的引用

      您需要动态分配内存,然后分配阵列的每个成员:

      int8_t *p = malloc(3 * sizeof(int8_t));
      p[0] = hours;
      p[1] = minutes;
      p[2] = seconds;
      return p;
      

      为了它的价值,它会更快地尝试它。你是问C还是C++?在C++中,你将使用<代码> STD::vector < /COD>或<代码> STD::数组< /C>作为返回类型,然后有<代码> Rurtn { 1, 2,…,n};<为什么你需要这个答案才能坐在电脑前?对不起,这不是问题不清楚的借口。请包括一个和任何编译器错误,你得到或解释什么问题,你面临的代码也,FWIW,如果你有一个互联网连接,你有一个编译器。这里有几个在线编译器:考虑到你的问题和答案不仅仅是给你的。未来读者会期待C或C++答案,当他们用不同的语言找到答案时,他们会失望。你基本上是在问两个问题once@EricPostpischil啊,是的,更新时考虑到了这一点。
      malloc
      版本应该使用
      int8\u t
      与原始版本保持一致。