鱼C论坛

 找回密码
 立即注册
查看: 17|回复: 1

复合字面量

[复制链接]
发表于 昨天 22:40 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
与有数组名的数组类似,复合字面量的类型名也代表首元素的地址。
那如果是结构体的复合字面量的类型名。那么有代表的是啥
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 22:40 | 显示全部楼层
对于数组的复合字面量,例如 (int[]){1, 2, 3},类型名 int[] 在表达式中确实代表首元素的地址(即一个 int* 类型的指针)。

但对于结构体的复合字面量,例如 (struct Point){1, 2},类型名 struct Point 代表的是结构体对象本身(即一个 struct Point 类型的值),而不是地址。结构体复合字面量是一个完整的结构体实例,可以直接使用或赋值。

例如:

  1. #include <stdio.h>

  2. struct Point {
  3.     int x;
  4.     int y;
  5. };

  6. int main() {
  7.     // 结构体复合字面量
  8.     struct Point p = (struct Point){1, 2};  // 这里类型名代表结构体值
  9.     printf("x: %d, y: %d\n", p.x, p.y);
  10.    
  11.     // 如果需要获取地址,可以使用取地址运算符 &
  12.     struct Point *ptr = &(struct Point){3, 4};
  13.     printf("通过指针访问: x: %d, y: %d\n", ptr->x, ptr->y);
  14.    
  15.     return 0;
  16. }
复制代码


总结:
数组复合字面量的类型名代表首元素地址,而结构体复合字面量的类型名代表结构体对象本身(一个值)。如果需要地址,可以显式使用取地址运算符 &

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-15 02:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表