【问题标题】:C function and struct on the fly动态 C 函数和结构
【发布时间】:2014-06-18 18:47:28
【问题描述】:

我想知道是否可以像在 c++ 中那样动态初始化 struct 以进行函数调用:

struct point {
  int x;
  int y;
};

some_function(new point(x,y));

谢谢:)

【问题讨论】:

    标签: c function struct on-the-fly


    【解决方案1】:

    是的。您可以使用 C99 中引入的compound literals

    some_function((struct pint) {5, 10});
    

    【讨论】:

    • 我没有投反对票,但我认为,您应该指出,结构的存储持续时间以封闭块的结尾结束。而且 afaik 没有办法用动态内存做类似的事情。
    • @mafso 因为struct 无论如何都是按值传递的(这个问题是关于C,而不是C++),所以关于它的生命周期的争论是无声的。
    • 请注意,函数参数周围的括号是多余的。 some_function((struct point){5, 10}); 也同样有效。
    • @cmaster:是的,你完全正确。但是在问题中,传递了一个指针。所以这不是真的等价的。但是,是的,寿命不是问题。
    • 值得注意的是复合字面量是左值,也就是说some_function(&(struct pint) {5, 10})也可以。这在某种意义上更接近于原始请求,因为它产生了一个指针参数(但它当然不会产生动态生命周期)。
    【解决方案2】:

    您可以在 C 中执行此操作并像这个人说的那样调用您的函数,但是您需要将标志 -std=c99 添加到您的 gcc 调用行,否则如果您使用一些 -W* 可能会失败标志。

    【讨论】:

      猜你喜欢
      • 2021-01-25
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 2018-11-05
      • 2020-04-14
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多