这个无名变量是什么?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]));


以上是这个无名变量是什么?C的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>