如果我有一个看起来像这样的原型(prototype):
function(float,float,float,float)
我可以像这样传递值:
function(1,2,3,4);
所以如果我的原型(prototype)是这样的:
function(float*);
有什么方法可以实现这样的目标吗?
function( {1,2,3,4} );
只是在寻找一种不创建临时变量的懒惰方法,但我似乎无法确定语法。
最佳答案
您可以在 C99(但不是 ANSI C (C90) 或 C++ 的任何当前变体)中使用复合文字。有关详细信息,请参阅 C99 标准的第 6.5.2.5 节。这是一个例子:
// f is a static array of at least 4 floats
void foo(float f[static 4])
{
...
}
int main(void)
{
foo((float[4]){1.0f, 2.0f, 3.0f, 4.0f}); // OK
foo((float[5]){1.0f, 2.0f, 3.0f, 4.0f, 5.0f}); // also OK, fifth element is ignored
foo((float[3]){1.0f, 2.0f, 3.0f}); // error, although the GCC doesn't complain
return 0;
}
GCC 还将此作为 C90 的扩展提供。如果您使用 -std=gnu90
(默认)、-std=c99
或 -std=gnu99
进行编译,它将编译;如果您使用 -std=c90
进行编译,则不会。
关于c++ - 如何在不使用变量 C/C++ 的情况下将常量数组文字传递给采用指针的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3366386/