将值直接作为数组传递给C中的函数

J..*_*..S 8 c arrays parameter-passing function-calls compound-literals

我有一个函数接受一个整数数组作为参数并打印它.

void printArray(int arr[3])
{
   int i;
   for(i=0; i<3; ++i)
   {
      printf("\n%d", arr[i]);
   }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法像这样传递数组的值

printArray( {3, 4, 5} );
Run Code Online (Sandbox Code Playgroud)

如果我知道前面的值而不必为了将它传递给函数而创建数组

Sou*_*osh 8

TL; DR函数需要一个(指向)数组作为输入参数,因此您必须传递一个.如果没有数组,你无法调用它.

也就是说,如果您打算"不创建额外的数组变量",那肯定是可能的.您可以使用称为复合文字的东西来实现这一点.就像是:

 printArr( (int []){3, 4, 5} );
Run Code Online (Sandbox Code Playgroud)

应该工作正常.

引用C11,第5.6.2.5章

[ C99,章§6.5.2.5/ P4 ]

后缀表达式由带括号的类型名称后跟括号括起的初始值设定项列表组成,是一个复合文字.它提供了一个未命名的对象,其值由初始化列表给出.

那说,printArr()并且printArray()不一样,但我相信这只是你的片段中的一个错字.

  • @ 2501根本没有阵列,这是完全不可能的.你可以很好地继续发表一个答案,说明如果你认为OP实际上是OP所追求的. (4认同)
  • 不知道.. C11有一些有趣的功能......用`gcc`编译得很好 (2认同)