C:可以将变量传递给请求结构的函数,因此在调用该函数时,这些变量是否包装在结构中?

时间:2019-02-20 10:34:07

标签: c function struct

我有一个请求结构的函数。

struct test{
    const int a;
    const int b;
};

void testFunction(struct test mytest)
{
    //code
}

我想知道是否有一种方法可以将两个int传递给该函数,因此调用它的过程会将这两个int包装到一个结构中。

类似的东西:

int main()
{
    //function call with some sort of wrapping system...
    testFunction({1,2});
}

有没有办法包装 {1,2}

(如果存在...是否也可以使用请求指向结构的指针的函数来完成?)

预先感谢

胡安

3 个答案:

答案 0 :(得分:3)

根据经验,应避免按值传递结构。此外,您要查找的功能可能仅适用于不修改传递的参数的函数,这意味着它应使用const正确性:

void testFunction(const struct test* mytest);

这可以用标准C中称为 compoundliteral 的临时结构来调用(类似于其他语言中的匿名对象)。

testFunction(&(struct test){1,2});

其中(struct test){1,2}是复合文字,我们将其地址传递给函数。

答案 1 :(得分:2)

您可以通过以下方式调用您声明的函数testFunction void testFunction(struct mytest test)

testFunction((struct mytest) {1,2});

这使用了复合文字,其格式为:

(type) { initializers... }

以这种方式使用,它将创建一个临时对象并将其值传递给函数。

对于使用指向结构的指针的函数,例如void testFunction(struct test *mytest),可以使用以下命令传递复合文字的地址:

testFunction(& (struct mytest) {1,2});

或:

testFunction((struct mytest []) {1,2});

函数内的复合文字的生存期在其关联的块(包围它的最里面的{...})的执行结束时结束。它具有自动存储期限。

任何函数之外的复合文字都有静态的存储期限;在程序的整个生命周期中都存在。

答案 2 :(得分:0)

尝试:

   #include <stdio.h>

struct test{
     int a;
     int b;
};

void testFunction(struct test *mytest)
{
    printf("a.........:%d",(*mytest).a);
}

int main()
{
    //function call with some sort of wrapping system...
    testFunction(&(struct test){1,2});
}

为我工作。