c - 使用指向从函数返回的结构的指针

标签 c function struct casting return-value

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

struct my_struct {
   int a;
   int b;
};

inline struct my_struct my_struct_clone(struct my_struct src, int members){
   struct my_struct copy = {0};
   //... Do copy based on args
   return copy;
}

我无法返回指针,因为它将指向已释放的内存。如何将克隆函数的返回值作为指向第二个函数的指针传递?类似于以下内容,但不使用中间占位符。

void do_sth(struct my_struct const *p);

struct my_struct val = my_struct_clone(&other, 123);
do_sth(&val);

以下失败(需要左值作为一元“&”操作数):

do_sth(&(my_struct_clone(&other, 123)));

但是可以声明一个结构内联
do_sth(&(struct my_struct){.a = 1, .b = 2});

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

最佳答案

函数返回的值为 rvalue ,
这意味着它的地址不能被占用。

但是compound literalslvalues这意味着可以获取他们的地址。

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

关于c - 使用指向从函数返回的结构的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59408385/

相关文章:

c - 如何删除C中的结构条目

C 字符串文字 "too big for character"

javascript - 如何通过Javascript检索wordpress中的当前用户?

c - 下推自动机的结构问题

创建一个简单的二叉搜索树

c - 可变大小消息的 VMIN 和 VTIME 终端设置

c - 打印输入中单词长度直方图的程序

python - 如何将一个函数延迟 X 个滴答数?

perl - 获得所有Perl内置函数的列表的最佳方法是什么?

c - 当数组在 c 中达到长度 0 时断言中止