接给别人做网站的活,建网站怎么上线,陕西营销型网站制作,湖北营销型网站建设公司简介#xff1a; CSDN博客专家#xff0c;专注Android/Linux系统#xff0c;分享多mic语音方案、音视频、编解码等技术#xff0c;与大家一起成长#xff01; 优质专栏#xff1a;Audio工程师进阶系列【原创干货持续更新中……】#x1f680; 人生格言#xff1a; 人生… 简介 CSDN博客专家专注Android/Linux系统分享多mic语音方案、音视频、编解码等技术与大家一起成长 优质专栏Audio工程师进阶系列【原创干货持续更新中……】 人生格言 人生从来没有捷径只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注Android系统攻城狮 1.前言 本篇目的理解C之struct匿名结构体用法。 2.struct匿名结构体用法介绍
C中的“匿名结构体”通常也被称为“无名结构体”或“未命名结构体”是指在结构体定义时没有给予其一个特定的名称。它与普通的有名结构体相比在语法上有一些差异和特殊用法。
定义匿名结构体 匿名结构体和有名结构体的定义语法相同都是使用struct关键字但不提供名称。定义匿名结构体主要用于临时的数据组织和封装通常作为其他数据类型如类、其他结构体的成员。
struct {int id;std::string name;
} student;在上述代码中我们使用匿名结构体定义了一个名为student的变量。
初始化匿名结构体 初始化匿名结构体的语法与普通结构体相同但不能使用结构体名进行初始化。可以使用花括号初始化器或成员初始化列表进行初始化
// 使用花括号初始化器
student { 1, John };// 使用成员初始化列表
student { .id 2, .name Alice };访问匿名结构体的成员 访问匿名结构体的成员使用点运算符.
std::cout ID: student.id , Name: student.name std::endl;匿名结构体作为其他数据类型的成员 匿名结构体常常被用作其他数据类型如类或有名结构体的成员可以在定义时直接使用匿名结构体来声明成员变量
class MyClass {
public:struct {int day;int month;int year;} birthdate;
};限定匿名结构体作用域 匿名结构体的作用域默认为定义它的代码块可以使用代码块来限定匿名结构体的作用域。这样可以避免结构体名称与其他结构体冲突。
{struct {int id;std::string name;} student;student.id 1;student.name John;std::cout ID: student.id , Name: student.name std::endl;
}3.实例例子
v1.0
#include iostream
using namespace std;struct {int x;int y;
} point;int main() {point.x 3;point.y 4;cout 坐标( point.x , point.y ) endl;return 0;
}v2.0
#include iostream
using namespace std;struct {string name;int score;
} student;int main() {student.name 张三;student.score 90;cout 姓名 student.name endl;cout 成绩 student.score endl;return 0;
}v3.0
#include iostream
using namespace std;struct {int width;int height;
} rectangle;int main() {rectangle.width 5;rectangle.height 7;cout 宽度 rectangle.width endl;cout 高度 rectangle.height endl;return 0;
}v4.0
#include iostream
using namespace std;struct {struct {int day;int month;int year;} date;struct {int hour;int minute;int second;} time;
} datetime;int main() {datetime.date.day 10;datetime.date.month 12;datetime.date.year 2021;datetime.time.hour 9;datetime.time.minute 30;datetime.time.second 15;cout 日期 datetime.date.year - datetime.date.month - datetime.date.day endl;cout 时间 datetime.time.hour : datetime.time.minute : datetime.time.second endl;return 0;
}v5.0
#include iostream
using namespace std;struct {string name;int age;string department;
} employee;int main() {employee.name 李四;employee.age 28;employee.department 销售部门;cout 姓名 employee.name endl;cout 年龄 employee.age endl;cout 部门 employee.department endl;return 0;
}v6.0
#include stdio.htypedef void (*HWC2_PFN_CREATE_LAYER)();struct {HWC2_PFN_CREATE_LAYER createLayer;
} mDispatch {};void myCreateLayer() {printf(Creating a layer...\n);
}int main() {mDispatch.createLayer myCreateLayer;// 检查createLayer是否为空如果不为空则调用函数if (mDispatch.createLayer ! NULL) {printf(Calling createLayer function...\n);mDispatch.createLayer();} else {printf(createLayer function is not assigned.\n);}return 0;
}