使用从函数返回的指向struct的指针

使用从函数返回的指向struct的指针,c,function,struct,casting,return-value,C,Function,Struct,Casting,Return Value,我有一个克隆结构成员并返回结构(不是指针)的函数。这个新创建的对象是短期的 struct my\u struct{ INTA; int b; }; 内联结构我的结构我的结构克隆(结构我的结构src,int成员){ struct my_struct copy={0}; //…根据参数进行复制 返回副本; } 我无法返回指针,因为它将指向解除分配的内存。如何将克隆函数的返回值作为指向第二个函数的指针传递?与以下内容类似,但不使用中间占位符 void do\u sth(struct my\u str

我有一个克隆结构成员并返回结构(不是指针)的函数。这个新创建的对象是短期的

struct my\u struct{
INTA;
int b;
};
内联结构我的结构我的结构克隆(结构我的结构src,int成员){
struct my_struct copy={0};
//…根据参数进行复制
返回副本;
}
我无法返回指针,因为它将指向解除分配的内存。如何将克隆函数的返回值作为指向第二个函数的指针传递?与以下内容类似,但不使用中间占位符

void do\u sth(struct my\u struct const*p);
struct my_struct val=my_struct_clone(&other,123);
做某事;
以下操作失败(左值必须作为一元'&'操作数):

do_sth(&(my_struct_clone(&other,123));
但是可以内联声明结构

do_sth(&(struct my_struct){.a = 1, .b = 2});

来解决一些关于使用中间层的评论。问题在于避免创建一个,而不是“我不能使用一个,因为……”。我最近遇到了一个编码结构,我认为我可以,但发现我不能,因此这个问题。此外,将已分配的实例传递给克隆函数仍然需要一个中间实例。我不希望函数头中出现像这样短暂的变量声明。

函数返回的值是, 这意味着它的地址不能被记录

但是,这意味着他们的地址可以被记录下来


您需要临时变量才能将克隆函数的结果作为指针传递。

我个人可以执行以下操作:

inline void my_struct_clone(const struct my_struct src, struct my_struct *srcCopy, int members){
   //... Do copy based on args
   srcCopy->a = src.a;
   srcCopy->b = src.b;
}
因此,您将调用克隆并将其声明为:

struct my_struct strClone;
my_struct_clone(str, &strClone, 123);
do_sth(strClone); // Call to strClone

占位符有问题吗?我不喜欢回答“为什么你想做a?改做B”。。。。但是为什么不实现提供新分配的结构指针的
my\u struct\u clone()
?当然,您必须设计程序,将内存释放到函数之外,但这将防止您进行奇怪的尝试。为什么您不能使用中间占位符呢?太易读了?太容易维护了?@Lundin我没有说“不能使用”,我问是否有办法“避免”。我在想也许我可以使用一些编译器技巧。它仍然需要使用一个中间版本,我正在努力避免。此外,该函数现在不是一个真正的
克隆
,而是一个
初始化
(schemantics)。我猜智能编译器会优化声明(以及伴随的堆栈分配)。