将值直接作为数组传递给C [重复]

Posted

技术标签:

【中文标题】将值直接作为数组传递给C [重复]【英文标题】:Passing values directly as array to function in C [duplicate] 【发布时间】:2017-01-26 23:25:27 【问题描述】:

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

void printArray(int arr[3])

   int i;
   for(i=0; i<3; ++i)
   
      printf("\n%d", arr[i]);
   

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

printArray( 3, 4, 5 );

如果我事先知道值不必为了将数组传递给函数而创建数组

【问题讨论】:

如果需要传递数组,则需要有数组。 只是为了修改@alk所说的,......只有我们可以决定/控制它是命名的还是未命名的。但必须在那里。 【参考方案1】:

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

也就是说,如果您想问“不创建额外的数组变量”,那当然是可能的。您可以使用称为 compound literal 的东西来实现这一点。比如:

 printArr( (int [])3, 4, 5 );

应该可以正常工作。

引用C11,第 §6.5.2.5 章

[C99第 §6.5.2.5/p4 章]

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

也就是说,printArr()printArray() 不一样,但我相信这只是你的 sn-p 中的一个错字。

【讨论】:

不知道.. C11 有一些有趣的功能... 用gcc 编译得很好 @ringø 实际上是 C99。 @2501 “有没有办法像这样传递数组的值”听起来像是复合文字是答案的问题。数组必须存在于某处 @2501 虽然从技术上讲你是非常正确的,但我认为 OP 不想创建一个单独的 array 变量 @2501 根本没有数组,这是绝对不可能的。您可以继续发布一个答案,说明如果您认为这实际上是 OP 所追求的。

以上是关于将值直接作为数组传递给C [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从angularjs传递给节点[重复]

将值传递给makefile中的现有变量[重复]

将参数作为接口传递[重复]

在函数c ++中将变量作为默认参数传递[重复]

邮递员插件将值[FromBody]传递给发布方法时的空值[重复]

将值传递给函数时,GCC前缀增量运算符行为不端[重复]