我想将多个值作为逗号分隔列表传递给函数,并将该列表接受到数组变量中。这是
#include <stdio.h>
void passValueAsList (int arr [],int len) {
int i;
for (i=0;i <len;i++)
printf ("%d, ",arr [i]);
}
int main () {
passValueAsList ({1,2,43,5,4,21},6);
return 0;
}
我不希望在传递之前将列表存储到数组中,而只是想将其传递给数组。因为存储可能需要在存储器中占用一些空间,这就是为什么我想以逗号分隔列表传递。
任何人都可以帮我解决这个问题。
答案 0 :(得分:3)
您可以使用复合文字。传递这样的数组。
ISO C99支持复合文字。复合文字看起来像包含初始值设定项的强制转换。它的值是转换中指定类型的对象,包含初始值设定项中指定的元素;这是一个左值。
#include <stdio.h>
void passValueAsList (int arr [],int len) {
int i;
for (i=0;i <len;i++)
printf ("%d, ",arr [i]);
}
int main () {
passValueAsList ((int []) {1,2,43,5,4,21}, 6);
return 0;
}
答案 1 :(得分:1)
Optional
这是无效的C语法,简单明了。
正确的语法是:
passValueAsList ({1,2,43,5,4,21},6);
修改
C99介绍了compound literals,所以这也是 可能的:
#include <stdio.h>
void passValueAsList (int arr [], size_t len) {
size_t i;
for (i=0;i <len;i++)
printf ("%d, ",arr [i]);
}
int main () {
int arr[] = {1,2,43,5,4,21};
passValueAsList(arr, sizeof arr / sizeof *arr);
return 0;
}
我不想在传递之前将列表存储到数组中,而只是想将它传递给数组。因为存储可能需要在内存中占用一些空间,这就是为什么我想以逗号分隔列表传递。
请注意,即使使用复合文字,数组仍将存储
在内存中的某个地方,#include <stdio.h>
void passValueAsList (int arr [], size_t len) {
size_t i;
for (i=0;i <len;i++)
printf ("%d, ",arr [i]);
}
int main () {
passValueAsList((int[]){1,2,43,5,4,21}, 6);
return 0;
}
仍然是一个指向开头的指针
阵列的位置。与之前代码的唯一区别在于您
passValueAsList
函数中没有变量。
两个版本的assembly都相同。
答案 2 :(得分:1)
使用C,您可以使用变量参数列表执行此操作: https://www.tutorialspoint.com/c_standard_library/c_macro_va_arg.htm
但是你必须以某种方式有一个标记,以便你调用的函数知道何时停止从调用堆栈中拉出项目。
您编写的示例调用代码需要C ++。在C ++ 11中,您可以让函数将std :: vector作为参数,并传递示例调用代码中的值。