将值直接作为数组传递给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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章