我有一个请求结构的函数。
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} ?
(如果存在...是否也可以使用请求指向结构的指针的函数来完成?)
预先感谢
胡安
答案 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});
}
为我工作。