gpt4 book ai didi

c - "int *a = (int[2]){0, 2};"究竟是做什么的?

转载 作者:太空狗 更新时间:2023-10-29 16:46:14 27 4
gpt4 key购买 nike

当我看到这个符号时,我感到非常惊讶。它有什么作用,它是一种什么样的 C 概念?

最佳答案

这是 C99 标准第 6.5.2.5 节中定义的复合文字。

它不是 C++ 语言的一部分,因此 C++ 编译器不编译它也就不足为奇了。 (或 Java 或 Ada 编译器)

复合文字的值是由初始化列表。如果复合文字出现在函数体之外,则对象具有静态存储期限;否则,它具有与关联的自动存储持续时间封闭 block 。

所以不,它不会破坏堆栈。编译器为对象分配存储空间。

括号放在类型周围,然后是一个初始化列表——它不是强制转换,因为一个简单的初始化列表在 C99 语法中没有意义;相反,它是应用于产生给定类型对象的类型的后缀运算符。您不是在创建 { 0, 3 } 并将其转换为数组,而是在用值 0 和 3 初始化 int[2]


至于为什么使用它,我在你的单行中看不到一个很好的理由,尽管它可能是 a 可以被重新分配以指向其他数组,所以这是第一个的较短方法两行:

int default_a[] = { 0, 2 };
int *a = default_a;

if (some_test) a = get_another_array();

我发现它对于将临时 union 传递给函数很有用

// fills an array of unions with a value
kin_array_fill ( array, ( kin_variant_t ) { .ref = value } )

关于c - "int *a = (int[2]){0, 2};"究竟是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3023738/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com