这个无名变量是什么?C
拿这个代码
int main() {
int *p = &(int){2};
}
这是什么?&(int){2}一个没有名字的变量?C 中的无名变量有什么意义?如果没有为它分配名称,编译器如何知道将它保留在堆栈中?
此外,如果我声明一个无名的值,例如
int main() {
(int){3};
}
有没有办法以完全可移植的方式获取这个无名变量的地址?(完全可移植,无论堆栈如何排列,它都可以在每个平台上运行)
经过多年的 CI 编码,不知道您可以像这样声明无名变量。您是否有理由希望在常规命名变量上使用它?
回答
这称为复合文字。它的生命周期与在同一范围内声明的局部变量相同。
一种常见的用途是在初始化后分配结构的所有值:
struct s {
int a;
float b;
};
struct s s1;
s1 = (struct s){3, 4.0};
或者将其地址传递给需要指向有效对象的指针的函数,但您不打算在函数返回后使用该对象:
int x[5];
memcpy(x, (int[5]){3,4,5,6,7}, sizeof(int[5]));