将列表作为参数传递给c中的函数

时间:2018-03-05 19:02:48

标签: c parameter-passing

我想将多个值作为逗号分隔列表传递给函数,并将该列表接受到数组变量中。这是

#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;
  }

我不希望在传递之前将列表存储到数组中,而只是想将其传递给数组。因为存储可能需要在存储器中占用一些空间,这就是为什么我想以逗号分隔列表传递。

任何人都可以帮我解决这个问题。

3 个答案:

答案 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作为参数,并传递示例调用代码中的值。