当前位置: 首页 > news >正文

广州网站开发建设成都互联网营销师培训

广州网站开发建设,成都互联网营销师培训,怎样做网站平台赚钱,外贸soho建站多少钱文章目录 1. 结构体1.1 结构体的声明1.2 结构体成员的访问1.3 匿名结构体1.4 结构体的自引用1.5 结构体内存对齐#xff08;计算结构体的大小#xff09;1.6 结构体传参1.6.1 传值传递1.6.2 传址传递#xff08;使用指针#xff09; 2. 位段2.1 什么是位段#xff1f;2.2 … 文章目录 1. 结构体1.1 结构体的声明1.2 结构体成员的访问1.3 匿名结构体1.4 结构体的自引用1.5 结构体内存对齐计算结构体的大小1.6 结构体传参1.6.1 传值传递1.6.2 传址传递使用指针 2. 位段2.1 什么是位段2.2 位段的内存分配2.3 位段的跨平台问题 3. 枚举3.1 枚举的定义3.2 枚举的好处 4. 联合共用体4.1 联合类型的定义4.2 联合大小的计算 1. 结构体 结构体是C语言中用于表示一组相关数据的自定义数据类型。结构体允许将多个不同类型的数据组组合在一起以便更方便地管理和操作这些数据。 1.1 结构体的声明 struct tag {member-list; }variable-list;使用 struct 关键字声明结构体的名称。在大括号 {} 内部定义结构体的成员变量成员变量的类型可以是标量、数组、指针甚至是其他结构体每个成员变量都有一个类型和一个名称成员之间用分号 ; 分隔。最后以分号 ; 结束结构体的定义。 以下代码展示了如何定义一个简单的结构体以用来表示学生信息 #include stdio.h// 定义一个结构体 Student struct Student {char name[20];//名字int age;//年龄double score;//成绩 };int main() {// 声明一个结构体变量并初始化struct Student s1 { zzb, 20, 98};// 访问结构体成员并打印信息printf(学生姓名%s\n, s1.name);printf(学生年龄%d\n, s1.age);printf(学生成绩%.2lf\n, s1.score);return 0; }1.2 结构体成员的访问 在C语言中结构体变量访问其成员一共有如下两种方式 使用点运算符.点运算符用于访问结构体变量的成员。其语法格式如下 结构体变量.成员名 例如上面代码中有一个名为 s1 的结构体变量并且结构体中有一个成员叫做 name我们就可以通过以下方式访问该成员 s1.name zzb;使用箭头运算符-箭头运算符用于访问结构体指针所指向的结构体的成员变量。其语法格式如下 结构体指针-成员名 例如如果有一个名为 ps1 的指向结构体的指针并且结构体中有一个成员叫做 age我们就可以通过以下方式访问该成员 ps1-age 20;1.3 匿名结构体 在C语言中我们可以创建匿名结构体这是一种没有名字的结构体结构体在声明的时候省略掉了结构体标签。该结构体通常用于简单的数据封装或临时数据组织而不需要定义一个有具体名字的结构体类型。 其定义方式如下 匿名结构体在声明和定义的同时创建不需要使用结构体名称。可以直接在需要的地方定义结构体并在大括号 {} 内部定义结构体的成员。 struct {// 成员定义 } 结构体变量名;注意 匿名结构体无法在不同的地方重复使用因为没有结构体名称来引用它。如果需要在多个地方使用相同的结构体结构建议定义具名的结构体类型。 1.4 结构体的自引用 结构体的自引用是指结构体中包含自身类型的成员。这种自引用的结构体通常用于创建复杂的数据结构如树、链表和图等。在C语言中要实现结构体的自引用通常需要使用指针来解决。 以下代码展示了如何创建一个简单的自引用结构体来表示链表节点 #include stdio.h// 定义一个链表节点的结构体 struct ListNode {int data; // 节点数据struct ListNode* next; // 指向下一个节点的指针 };int main() {// 创建链表节点struct ListNode node1, node2, node3;node1.data 1;node2.data 2;node3.data 3;// 连接节点形成链表node1.next node2;node2.next node3;node3.next NULL; // 链表结束// 遍历链表并打印节点数据struct ListNode *cur node1;while (cur ! NULL) {printf(%d , cur-data);cur cur-next;}return 0; }1.5 结构体内存对齐计算结构体的大小 在C语言中结构体内存对齐是编译器为了提高内存访问效率而采取的一种优化策略。关于结构体内存对齐的详细介绍这里可以参考之前写的文章如何计算一个结构体的大小C语言 这里就不再赘述了。 1.6 结构体传参 在C语言中我们可以将结构体作为参数传递给函数。结构体传参的方式有两种传值传递和传址传递使用指针。 1.6.1 传值传递 在传值传递时函数形参是实参的一份临时拷贝这也就意味着在函数内部操作的是结构体的一份拷贝不会影响实参结构体。这种方式适用于结构体较小且复制开销较小的情况。这是因为函数传参的时候参数是需要压栈的。如果传递一个结构体对象的时候结构体过大参数压栈的的系统开销比较大所以会导致性能的下降。 以下代码展示了结构体传值传递的方式 #include stdio.h// 定义一个结构体 struct Point {int x;int y; };// 以传值传递的方式 void modify_point(struct Point p) {p.x 10;p.y 20; }int main() {struct Point p {5, 5};modify_point(p);printf(x: %d, y: %d\n, p.x, p.y); // 输出仍为原始值return 0; }1.6.2 传址传递使用指针 在传址传递时函数接收的是结构体的指针可以通过指针修改实参结构体的内容。这种方式适用于当结构体较大且复制开销较大的情况。 #include stdio.h// 定义一个结构体 struct Point {int x;int y; };// 以传址传递的方式 void modify_point(struct Point *p) {p-x 10;p-y 20; }int main() {struct Point p {5, 5};modify_point(p);printf(x: %d, y: %d\n, p.x, p.y); // 输出已修改后的值return 0; }2. 位段 2.1 什么是位段 位段是一种C语言的结构体成员它可以在结构体定义时指定某个成员变量所占用的二进制位数这是因为有些数据在存储时并不需要占用一个完整的字节而是需要占用一个或几个二进制位即可。 位段的主要目的是节省内存。 其声明语法如下 struct {type member_name : width; };type 表示要使用的整数类型通常是 int、unsigned int 、char(整型家族)等,在C99之后也可以是其他类型。member_name 是位段的名称。width 是该位段占用的比特位数。 以下是一个位段的示例 #include stdio.h// 定义一个包含位段的结构体 struct A {int _a:2;//2个比特位int _b:5;//5个比特位int _c:6;//10个比特位int _d:8;//30个比特位 }; int main() {struct A a;// 设置位段的值a._a 1;a._b 0;a._c 5;a._d 8;printf(_a: %d\n, a._a);printf(_b: %d\n, a._b);printf(_c: %d\n, a._c);printf(_d: %d\n, a._d);return 0; }2.2 位段的内存分配 位段会按照其在结构体中的声明顺序依次分配内存。 位段的成员可以是 int unsigned int signed int 或者是 char 属于整形家族类型。位段的空间上是按照需要以4个字节 int 或者1个字节 char 的方式来开辟的。位段涉及很多不确定因素位段是不跨平台的注重可移植的程序应该避免使用位段。 我们通过下面的例子探究以下位段在vs2013这个平台如何开辟空间的 #include stdio.hstruct S {char a:3;char b:4;char c:5;char d:4; };int main() {struct S s {0};s.a 10;s.b 12;s.c 3;s.d 4; } 这里先假设在一个字节内部先使用低比特位且当一个字节剩余的bit位不足以存下下一个变量时舍弃剩余的bit位为下一个变量重新申请一个字节。 我们打开vs进行调试看下内存里面是如何存储的。 在vs下具体的内存布局和我们假设的一致。 2.3 位段的跨平台问题 int 位段被当成有符号数还是无符号数是不确定的。位段中最大位的数目不能确定。16位机器最大1632位机器最大32写成27在16位机 器会出问题。位段中的成员在内存中从左向右分配还是从右向左分配标准尚未定义。当一个结构包含两个位段第二个位段成员比较大无法容纳于第一个位段剩余的位时是 舍弃剩余的位还是利用这是不确定的。 因此跟结构相比位段可以达到同样的效果虽然可以很好的节省空间但是有跨平台的问题存在。 3. 枚举 枚举是C语言中的一种自定义数据类型用于定义一组命名的整数常量这些常量通常用于表示一组相关的离散值。 3.1 枚举的定义 其基本语法如下 enum enum_name {a,b,c,// ... };num_name 是枚举类型的名称。a, b, c等是枚举常量它们是整数值通常从0开始自动递增。当然在定义的时候也可以赋初值。 以下代码展示了枚举的使用 #include stdio.h// 定义一个枚举类型 enum Color {RED, // 0GREEN, // 1BLUE // 2 };int main() {// 声明一个枚举类型的变量enum Color col;// 给枚举变量赋值col RED;// 使用枚举常量if (col RED) {printf(The color is red.\n);} else if (col GREEN) {printf(The color is green.\n);} else if (col BLUE) {printf(The color is blue.\n);}return 0; }3.2 枚举的好处 枚举常量在整个程序中具有全局作用域可以用作整数值的符号名称以提高代码的可读性。 增加代码的可读性和可维护性和#define定义的标识符比较枚举有类型检查更加严谨。防止了命名污染封装便于调试使用方便一次可以定义多个常量 4. 联合共用体 联合也是C语言中的一种自定义的数据类型与结构体类似但与结构体不同的是 联合的成员共用同一块内存空间只能同时存储其中一个成员的值。这也说明联合的大小虽少是其最大成员的大小。由于联合的成员共用同一块内存空间因此在给一个成员赋值后其他成员的值可能会受到影响。 下面代码的运行结果说明了其特性 #include stdio.h//联合类型的声明 union Un {char c;int i; };int main() {//联合变量的定义union Un un;// 下面输出的结果是一样的吗printf((un.i) %d\n, (un.i));printf((un.c) %d\n, (un.c));//下面输出的结果是什么un.i 0x11223344;un.c 0x55;printf(%x\n, un.i);return 0; }分析如下 4.1 联合类型的定义 联合的基本语法如下 union union_name {// 成员定义 };union_name 是联合类型的名称。 4.2 联合大小的计算 其大小的计算规则遵循以下两个规则 联合的大小至少是最大成员的大小。当最大成员大小不是最大对齐数的整数倍的时候就要对齐到最大对齐数的整数倍。 思考一下下面代码的运行结果是什么 #include stdio.h union Un1 {char c[5];int i; };union Un2 {short c[7];int i; };int main() {//下面输出的结果是什么printf(%d\n, sizeof(union Un1));printf(%d\n, sizeof(union Un2)); ]分析如下 Un2的分析和上述分析一致Un2的大为16。 运行结果如下 这里需要注意的是不同编译器和平台对于联合的对齐方式可能会有所不同这可能会影响联合的总大小。但无论如何联合的大小都不会小于最大成员的大小。 至此本片文章就结束了若本篇内容对您有所帮助请三连点赞关注收藏支持下。 创作不易白嫖不好各位的支持和认可就是我创作的最大动力我们下篇文章见 如果本篇博客有任何错误请批评指教不胜感激
http://www.zqtcl.cn/news/902413/

相关文章:

  • 技术支持东莞网站建设机械seo岗位是什么意思
  • 做商城网站需要备案什么域名硬件开发工具有哪些
  • 网络网站制作技巧wordpress全文
  • 韩国原生ip站群服务器左右悬停代码网站
  • 专门做广东11选5的网站网站 备案 营业执照
  • 免费扑克网站wordpress弹出服务协议窗口
  • 网站的反爬一般怎样做网站右键屏蔽
  • 茂名做网站dyiee青岛宣传片制作公司
  • 凡科网可以自己做网站吗编程常用网站
  • 做网站练手项目公司营业执照可以做几个网站
  • 聚通达网站建设网站并发要求
  • 网站建设预算申请如何写服装店网页设计素材
  • 做网站设计的公司柳州芜湖又出现一例
  • 重庆网站网站建设东莞市网站建设公司哪家好
  • php做网站如何架构wordpress 排版
  • wordpress免费网站模板下载地址在北京注册公司需要多少钱
  • 做的网站打不开高端网站名字
  • 个人网站建设报告西安网站开发高端网站开发
  • “网站建设:上海珍岛”网站备案信息查询系统
  • 北京哪个公司做网站专业建站培训
  • 郑州知名网站推广网站管理设置
  • 建设工程网站资质人员查询常州模板网站建设价格
  • 自己建网站做app手机网站列表页源码
  • 企业网站模板seo网站建设关键词优化
  • 平面毕业设计作品网站推广普通话ppt
  • p2p网站开发思路方案免费建简单网站
  • 微信朋友圈的网站连接怎么做互联网工程有限公司
  • 高大上企业网站优秀的门户网站
  • 做seo对网站推广有什么作用自己做电商网站吗
  • 网站从哪些方面来做泉州网页搜索排名提升