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

【C语言进阶】自定义类型:结构体,枚举,联合

自定义类型:结构体,枚举,联合

    • 1.结构体
      • 1.1结构体类的基础知识
      • 1.2结构的声明
      • 1.3特殊的声明
      • 1.4结构的自引用
      • 1.5结构体变量的定义和初始化
      • 1.6结构体内存对齐
      • 1.7修改默认对齐
      • 1.8结构体传参
    • 2.段位
      • 2.1什么是段位
      • 2.2段位的内存分配
      • 2.3位段的跨平台问题
      • 2.4位段的应用
    • 3.枚举
      • 3.1枚举类型的定义
      • 3.2枚举的优点
      • 3.3枚举的使用
    • 4.联合
      • 4.1联合类型的定义
      • 4.2联合的特点
      • 4.3联合大小的计算

1.结构体

1.1结构体类的基础知识

结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。

1.2结构的声明

在这里插入图片描述
例如描述一个学生:

struct Stu
{
char name[20];//名字
int age;//年龄
char sex[5];//性别
char id[20];//学号
}; //分号不能丢

1.3特殊的声明

在声明结构的时候,可以不完全的声明

//匿名结构体类型
struct 
{char name[20];char author[12];float price;
}b1, b2;

上面的两个结构在声明的时候省略掉了结构体标签(tag)

当我们使用匿名结构体时,以下做法合理么?

struct
{char name[20];char author[12];float price;
}b;
struct
{char name[20];char author[12];float price;
}* p;
int main()
{p = &b;//不建议这样写return 0;
}

警告:
编译器会把上面的两个声明当成完全不同的两个类型。
所以是非法的。

1.4结构的自引用

//错误自引用
struct Node
{int data;struct Node next;
};
//正确自引用
struct Node
{int data;struct Node* next;
};

1.5结构体变量的定义和初始化

struct Point
{int x;int y;
}p1; //声明类型的同时定义变量p1,p1为全局变量
struct Point p2; //定义结构体变量p2,p2为局部变量
//初始化:定义变量的同时赋初值。
struct Point p3 = { x, y };
struct Stu //类型声明
{char name[15];//名字int age; //年龄
};
struct Stu s = { "zhangsan", 20 };//初始化
struct Node
{int data;struct Point p;struct Node* next;
}n1 = { 10, {4,5}, NULL }; //结构体嵌套初始化
struct Node n2 = { 20, {5, 6}, NULL };//结构体嵌套初始化

1.6结构体内存对齐

我们已经掌握了结构体的基本使用了。
现在我们深入讨论一个问题:计算结构体的大小。
这也是一个特别热门的考点: 结构体内存对齐
首先得掌握结构体的对齐规则:

  1. 第一个成员在与结构体变量偏移量为0的地址处。
  2. 其他成员变量要对齐到某个数字对齐数的整数倍的地址处。
    对齐数 = 编译器默认的一个对齐数与该成员大小的较小值
    VS中默认的值为8
    gcc没有对齐数,对齐数就是自身大小
  3. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍
  4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
    案例一:
struct S1
{char c1;int i;char c2;
};
int main()
{printf("%d\n", sizeof(struct S1));return 0;
}

运行结果:
在这里插入图片描述

分析:
在这里插入图片描述

案例二:

struct S2
{char c1;char c2;int i;
};
int main()
{printf("%d\n", sizeof(struct S2));return 0;
}

运行结果:
在这里插入图片描述

分析:
在这里插入图片描述

案例三:

struct S3
{double d;char c;int i;
};
int main()
{printf("%d\n", sizeof(struct S3));return 0;
}

运行结果:
在这里插入图片描述

分析:
在这里插入图片描述

案例四:

//练习4 - 结构体嵌套问题
struct S3
{double d;char c;int i;
};
struct S4
{char c1;struct S3 s3;double d;
};
int main()
{printf("%d\n", sizeof(struct S4));return 0;
}

运行结果:
在这里插入图片描述

分析:
在这里插入图片描述

为什么存在内存对齐?
大部分的参考资料都是如是说的:

  1. 平台原因(移植原因)
    不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
  2. 性能原因
    数据结构(尤其是栈)应该尽可能地在自然边界上对齐。
    原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。

总体来说:
结构体的内存对齐是拿空间来换取时间的做法。

那在设计结构体的时候,我们既要满足对齐,又要节省空间,如何做到:
让占用空间小的成员尽量集中在一起

//例如:
struct S1
{char c1;int i;char c2;
};
struct S2
{char c1;char c2;int i;
};

S1和S2类型的成员一模一样,但是S1和S2所占空间的大小有了一些区别。

补:offsetof(可以计算结构体成员相较于结构体起始位置的偏移量)
在这里插入图片描述

offsetof案例:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stddef.h>
struct S1
{char c1;//1int i;//4char c2;//1
};
int main()
{struct S1 s1 = { 0 };printf("%d\n", offsetof(struct S1, c1));printf("%d\n", offsetof(struct S1, i));printf("%d\n", offsetof(struct S1, c2));return 0;
}

运行结果:
在这里插入图片描述

1.7修改默认对齐

之前我们见过了 #pragma 这个预处理指令,这里我们再次使用,可以改变我们的默认对齐数。

#pragma pack(1)//设置默认对齐数为1
struct S
{char c1;//1 1 1int a; // 4 1 1char c2;//1 1 1
};
#pragma pack()//取消设置的默认对齐数,还原为默认
int main()
{printf("%d\n", sizeof(struct S));return 0;
}

运行结果:
在这里插入图片描述

结论:
结构在对齐方式不合适的时候,我么可以自己更改默认对齐数。

1.8结构体传参

代码案例:
struct S
{int data[100];int num;
};
//结构体传参
void print1(struct S tmp)
{printf("%d\n", tmp.num);
}
//结构体地址传参
void print2(const struct S* ps)
{printf("%d\n", ps->num);
}
int main()
{struct S s = { {1,2,3}, 100 };print1(s);print2(&s);return 0;
}

运行结果
在这里插入图片描述

上面的 print1 和 print2 函数哪个好些?
答案是:首选print2函数。
原因:

函数传参的时候,参数是需要压栈,会有时间和空间上的系统开销。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。

结论:
结构体传参的时候,要传结构体的地址。

2.段位

结构体讲完就得讲讲结构体实现位段的能力。

2.1什么是段位

位段的声明和结构是类似的,有两个不同:

1.位段的成员必须是 int、unsigned int 或signed int 。
2.位段的成员名后边有一个冒号和一个数字。

代码案例:
struct A
{int _a : 2;//二进制位int _b : 5;int _c : 10;int _d : 30;
};
int main()
{printf("%d\n", sizeof(struct A));return 0;
}

A就是一个位段类型。
那位段A的大小是多少?

运行结果:
在这里插入图片描述

2.2段位的内存分配

  1. 位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型
  2. 位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的。
  3. 位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。
struct 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;printf("%d\n", sizeof(s));return 0;
}

空间是如何开辟的?
在这里插入图片描述

运行结果:
在这里插入图片描述

2.3位段的跨平台问题

  1. int 位段被当成有符号数还是无符号数是不确定的。
  2. 位段中最大位的数目不能确定。(16位机器最大16,32位机器最大32,写成27,在16位机
    器会出问题。
  3. 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。
  4. 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是
    舍弃剩余的位还是利用,这是不确定的。

总结:

跟结构相比,位段可以达到同样的效果,但是可以很好的节省空间,但是有跨平台的问题存在。

2.4位段的应用

在这里插入图片描述

3.枚举

枚举顾名思义就是一一列举。
把可能的取值一一列举。

比如我们现实生活中:

一周的星期一到星期日是有限的7天,可以一一列举。
性别有:男、女、保密,也可以一一列举。
月份有12个月,也可以一一列举

这里就可以使用枚举了

3.1枚举类型的定义

enum Day//星期
{Mon,Tues,Wed,Thur,Fri,Sat,Sun
};
enum Sex//性别
{MALE,FEMALE,SECRET
}enum Color//颜色
{RED,GREEN,BLUE
};

以上定义的 enum Day , enum Sex , enum Color 都是枚举类型。
{ }中的内容是枚举类型的可能取值,也叫 枚举常量 。

这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。

enum Color//颜色
{RED = 1,GREEN = 2,BLUE = 4
};

3.2枚举的优点

为什么使用枚举?
我们可以使用 #define 定义常量,为什么非要使用枚举?

枚举的优点:

  1. 增加代码的可读性和可维护性
  2. 和#define定义的标识符比较枚举有类型检查,更加严谨。
  3. 防止了命名污染(封装)
  4. 便于调试
  5. 使用方便,一次可以定义多个常量

3.3枚举的使用

enum Color
{RED,//0GREEN,//1BLUE//2
};
#define RED 0
int main()
{enum Color c = GREEN;//只能拿枚举常量给枚举变量赋值enum Color cc = 3;//.c文件中允许,.cpp文件中不允许return 0;
}

4.联合

4.1联合类型的定义

联合也是一种特殊的自定义类型
这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。

//联合类型的声明
union Un
{char c;int i;
};
int main()
{//联合变量的定义union Un un;//计算连个变量的大小printf("%d\n", sizeof(un));return 0;
}

运行结果:
在这里插入图片描述

4.2联合的特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。

union Un
{char c;int i;
};
int main()
{printf("%d\n", sizeof(union Un));union Un un = { 0 };un.i = 0x11223344;un.c = 0x55;printf("%p\n", &un);printf("%p\n", &(un.i));printf("%p\n", &(un.c));return 0;
}

&un:
在这里插入图片描述

运行结果:
在这里插入图片描述

面试题:
判断当前计算机的大小端存储

int check_sys()
{union{int i;char c;}un = {.i = 1};return un.c;
}int main()
{int ret = check_sys();if (ret == 1)printf("小端\n");elseprintf("大端\n");return 0;
}

运行结果:
在这里插入图片描述

4.3联合大小的计算

联合的大小至少是最大成员的大小。
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。

比如:

代码案例:
union Un1
{char c[5];//5 1 8 1int i;//4 8 4
};
union Un2
{short c[7];//14 2 8 2int i;//4 4 8 4
};
int main()
{printf("%d\n", sizeof(union Un1));//5+3 = 8printf("%d\n", sizeof(union Un2));//16return 0;
}

运行结果:
在这里插入图片描述

💘不知不觉,自定义类型:结构体,枚举,联合以告一段落。通读全文的你肯定收获满满,让我们继续为C语言学习共同奋进!!!

相关文章:

【C语言进阶】自定义类型:结构体,枚举,联合

自定义类型&#xff1a;结构体&#xff0c;枚举&#xff0c;联合 1.结构体1.1结构体类的基础知识1.2结构的声明1.3特殊的声明1.4结构的自引用1.5结构体变量的定义和初始化1.6结构体内存对齐1.7修改默认对齐1.8结构体传参 2.段位2.1什么是段位2.2段位的内存分配2.3位段的跨平台问…...

Sklearn 聚类算法的性能评估

聚类算法的性能评估是什么? 聚类是无监督学习的一种常用技术,用于将相似的数据点分组在一起。然而在实施聚类算法后,一个关键的问题便是如何评估其性能或质量。由于聚类是无监督的,因此评估其性能相对更为复杂。本文将探讨多种用于评估聚类性能的指标,包括肘部法则、轮廓…...

9月最新外贸进出口数据出来了,外贸整体向好

10月13日&#xff0c;海关总署发布数据显示&#xff0c;今年前三季度中国货物贸易出口2.52万亿美元&#xff0c;下降5.7%。 9月当月&#xff0c;中国出口2991.3亿美元&#xff0c;同比下降6.2%。贸易顺差777.1亿美元。 这个数据还是在改善的。特别是&#xff0c;我们看到全球…...

SSL证书有效期越来越短是什么原因?

随着互联网的普及和数据安全意识的提高&#xff0c;SSL证书的使用变得日益普遍。SSL证书是一种用于加密数据传输并验证网站身份的安全协议。它们通过加密在用户浏览器和网站服务器之间传输的数据&#xff0c;从而确保数据的隐私和完整性。此外&#xff0c;SSL证书还通过数字签名…...

【前段基础入门之】=>CSS3新特性 3D 变换

导语 在上一章节中&#xff0c;我们分享了2D 变换的效果&#xff0c;也分享了一些案例&#xff0c;同时&#xff0c;既然有2D 变换&#xff0c;那么也就肯定有 3D 变换 那么本章节&#xff0c;就为大家带来有关3D 变换的分享. 文章目录 开启3D空间设置景深透视点位置3D 位移3D …...

form表单的三种封装方法(Vue+ElementUI)

form表单的三种封装方法&#xff08;VueElementUI&#xff09; 1.首先是最普通&#xff0c;也是大家最先想到的方法&#xff0c;直接封装&#xff1a;2.实现表单动态渲染、可视化配置的方法&#xff0c;动态表单又可以分为两种方法&#xff1a;(注意&#xff1a;注意 v-model 的…...

云原生周刊:CNCF 宣布 Cilium 毕业 | 2023.10.16

开源项目推荐 Reloader Reloader 是一个 Kubernetes 控制器&#xff0c;用于监控 ConfigMap 和 Secrets 中的变化&#xff0c;并对 Pod 及其相关部署、StatefulSet、DaemonSet 和 DeploymentConfig 进行滚动升级&#xff01; Spegel Spegel 在瑞典语中意为镜像&#xff0c;…...

岩土工程监测利器:多通道振弦数据记录仪应用隧道监测

岩土工程监测利器&#xff1a;多通道振弦数据记录仪应用隧道监测 岩土工程监测在现代工程建设中的作用越来越重要。为了确保工程质量和工程安全&#xff0c;需要对工程过程中的各种参数进行实时监测和记录。而多通道振弦数据记录仪则是一种重要的监测工具&#xff0c;特别适用…...

hive排序

目录 order by (全局排序asc ,desc) sort by(reduce 内排序) Distribute by(分区排序) Cluster By&#xff08;当 distribute by 和 sorts by 字段相同时 &#xff0c;可以使用 &#xff09; order by (全局排序asc ,desc) INSERT OVERWRITE LOCAL DIRECTORY /home/test2 …...

网络安全入门教程(非常详细)从零基础入门到精通

网络安全是一个庞大而不断发展的领域&#xff0c;它包含多个专业领域&#xff0c;如网络防御、网络攻击、数据加密等。介绍网络安全的基本概念、技术和工具&#xff0c;逐步深入&#xff0c;帮助您成为一名合格的网络安全从业人员。 一、网络安全基础知识 1.计算机基础知识 …...

自动驾驶中的数据安全和隐私

自动驾驶技术的发展已经改变了我们的出行方式&#xff0c;但伴随着这项技术的普及&#xff0c;数据安全和隐私问题也变得愈发重要。本文将探讨自动驾驶中的数据收集、数据隐私和安全挑战&#xff0c;以及如何保护自动驾驶系统的数据。 自动驾驶中的数据收集 在自动驾驶技术中…...

回应:淘宝支持使用微信支付?

近日&#xff0c;就有网友共享称淘宝APP的支付界面出现“微信二维码支付”及其“去微信找个朋友帮我付”这个选项。 淘宝官方网对此回应称&#xff0c;“微信二维码支付作用仍在逐步开放中&#xff0c;目前只有针对一些客户对外开放&#xff0c;并且只有部分商品适用这一付款方…...

k8s的etcd启动报错

背景 电脑休眠状态意外断电导致虚拟机直接进入关机状态。 问题 kubectl命令报错 [rootmaster01 ~]#kubectl get node The connection to the server master01.kktb.org:6443 was refused - did you specify the right host or port?kubelet服务报错 Oct 15 08:39:37 mas…...

codeigniter 4.1.3 gadget chain

EXP code 找到一条很有意思的codeigniter框架的链。 <?php namespace CodeIgniter\HTTP {class CURLRequest {protected $config ["debug" > "./eee.php"];} }namespace CodeIgniter\Session\Handlers {class MemcachedHandler{public function …...

L1-039 古风排版 C++解法

题目再现 中国的古人写文字&#xff0c;是从右向左竖向排版的。本题就请你编写程序&#xff0c;把一段文字按古风排版。 输入格式&#xff1a; 输入在第一行给出一个正整数N&#xff08;<100&#xff09;&#xff0c;是每一列的字符数。第二行给出一个长度不超过1000的非…...

docker安装tomcat

1.通过dockerhub搜索tomcat镜像 dockerhub官网&#xff1a;https://hub.docker.com/ 选择star最多的tomcat点击进入&#xff0c;有很多tomcat详细信息 docker run&#xff1a;运行&#xff0c;没有则会去docker pull 拉去镜像 -it&#xff1a;使用交互方式运行&#xff0c;进…...

别人ping不通我的ip解决方法

方法一&#xff1a;关闭防火墙 方法二&#xff1a;开启ICMPv4 控制面板\系统和安全\Windows Defender 防火墙-----打开高级设置-----入站规则&#xff0c;开启域和专用两个 ICMPv4 方法三&#xff1a;更改共享选项 控制面板\网络和 Internet\网络和共享中心...

Python爬虫基础之Selenium详解

目录 1. Selenium简介2. 为什么使用Selenium&#xff1f;3. Selenium的安装4. Selenium的使用5. Selenium的元素定位6. Selenium的交互7. Chrome handless参考文献 原文地址&#xff1a;https://program-park.top/2023/10/16/reptile_3/ 本文章中所有内容仅供学习交流使用&…...

MS5228数模转换器可pin对pin兼容AD5628

MS5228/5248/5268 是一款 12/14/16bit 八通道输出的电压型 DAC&#xff0c;内部集成上电复位电路、可选内部基准、接口采用四线串口模式&#xff0c;最高工作频率可以到 40MHz&#xff0c;可以兼容 SPI、QSPI、DSP 接口和 Microwire 串口。可pin对pin兼容AD5628。输出接到一个 …...

强化学习基础(2)—常用算法总结

目录 1.Value-Based 2. Policy-Based 参考文献 1.Value-Based Sarsa&#xff08;State-action-reward-state’-action&#xff09;&#xff1a;是为了建立和优化状态-动作(state-action)的价值Q表格所建立的方法。首先初始化Q表格&#xff0c;根据当前的状态和动作与环境进行…...

Web攻防01-ASP应用相关漏洞-HTTP.SYSIIS短文件文件解析ACCESS注入

文章目录 ASP-默认安装-MDB数据库泄漏下载漏洞漏洞描述 ASP-中间件 HTTP.SYS&#xff08;CVE-2015-1635&#xff09;1、漏洞描述2、影响版本3、漏洞利用条件4、漏洞复现 ASP-中间件 IIS短文件漏洞1、漏洞描述2、漏洞成因:3、应用场景&#xff1a;4、利用工具&#xff1a;5、漏洞…...

入门小白拥有服务器的建议

学习网络知识 当我们拥有了一台服务器以后,需要提前准备学习一些网络、服务器、互联网方便的知识, 以备在后续学习工作中使用。 建议的网络知识学习清单: 1. 网络基础知识:包括网络拓扑结构、协议、IP地址、子网掩码、网关等基础概念。 2. 网络安全:包括网络攻击类型、防…...

Spring源码解析——事务增强器

正文 上一篇文章我们讲解了事务的Advisor是如何注册进Spring容器的&#xff0c;也讲解了Spring是如何将有配置事务的类配置上事务的&#xff0c;实际上也就是用了AOP那一套&#xff0c;也讲解了Advisor&#xff0c;pointcut验证流程&#xff0c;至此&#xff0c;事务的初始化工…...

JAVA发送消息到RabbitMq

项目中&#xff0c;作为生产者自定义消息发送到RabbitMq。 1.引入rmq依赖 <!-- rabbitmq 依赖 --><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.9.0</version></dependen…...

Python 函数(lambda 匿名函数、自定义函数、装饰器)基本使用指南

Python 函数 函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现单一&#xff0c;或相关联功能的代码段 lambda 匿名函数 对于单行函数&#xff0c;使用 lambda 表达式可以省去定义函数的过程&#xff0c;让代码更加简洁&#xff1b; 对于不需要多次复用的函数&a…...

第五届芜湖机器人展,正运动助力智能装备“更快更准”更智能!

■展会名称&#xff1a; 第十一届中国(芜湖)科普产品博览交易会-第五届机器人展 ■展会日期 2023年10月21日-23日 ■展馆地点 中国ㆍ芜湖宜居国际博览中心B馆 ■展位号 B029 正运动技术&#xff0c;作为国内领先的运动控制企业&#xff0c;将于2023年10月21日参加芜湖机…...

JVM八股文

1.JVM的内存结构&#xff1f; 2.OOM是什么&#xff0c;怎么排查&#xff1f; 3.请解释四种引用是什么意思有什么区别&#xff1f; 4.GC的回收算法有哪些&#xff1f; 5.怎么判断对象是否存活&#xff1f; 1.什么是JVM内存结构 jvm将虚拟机分为5大区域&#xff0c;程序计数器、…...

代码随想录算法训练营第二十四天丨 回溯算法part02

216.组合总和III 思路 本题就是在 [1,2,3,4,5,6,7,8,9] 这个集合中找到和为n的k个数的组合。 相对于77. 组合 (opens new window)&#xff0c;无非就是多了一个限制&#xff0c;本题是要找到和为n的k个数的组合&#xff0c;而整个集合已经是固定的了[1,...,9]。 本题k相当于…...

【Python机器学习】零基础掌握AgglomerativeClustering聚类

如何解决城市规划问题? 城市规划者们面临一个复杂问题:如何合理地规划土地,使商业、居民、公园和其他设施互相便利,同时又不互相干扰?解决这个问题不仅需要对土地进行精准的分类,还要考虑到土地之间的相互关系。 借助层次聚类算法(Agglomerative Clustering),规划者…...

uniapp小程序中给web-view页面添加授权弹窗(使用cover-view组件覆盖实现该功能)

效果图&#xff1a; web-view是承载网页的容器。会自动铺满整个小程序页面&#xff0c;个人类型的小程序暂不支持使用。 再看下面一个提示&#xff1a; 每个页面只能有一个 web-view&#xff0c;web-view 会自动铺满整个页面&#xff0c;并覆盖其他组件。 也就是说&#xff0c;…...

城乡建设局官网/seo广州工作好吗

一、图灵奖简介 图灵奖&#xff08;A.M. Turing Award&#xff0c;又译“杜林奖”&#xff09;&#xff0c;由美国计算机协会&#xff08;ACM&#xff09;于1966年设立&#xff0c;又叫“A.M. 图灵奖”&#xff0c;专门奖励那些对计算机事业作出重要贡献的个人。其名称取自计算…...

天津做网站优化的公司/企业网站优化解决方案

mutation_data_tidy mutation_data_tidy PeRl 这次偶然课题需要用到突变相关数据&#xff0c;在这做一下简单的总结&#xff0c;抛砖引玉。 癌症相关数据最近都是从FIREHOSE上下载的&#xff0c;第一次发现突变数据并不是按照矩阵形式存储的&#xff0c;还需要自己整理清洗数据…...

自己电脑做的网站如何映射到公网/在线优化工具

在系统管理或者数据库管理中&#xff0c;经常要周期性的执行某一个命令或者SQL语句。对于linux系统熟悉的人都知道linux的cron计划任务&#xff0c;能很方便地实现定期运行指定命令的功能。Mysql在5.1以后推出了事件调度器(Event Scheduler)&#xff0c;和linux的cron功能一样&…...

网站开发环境 对比/品牌宣传活动策划方案

Kmeans是最经典的聚类算法之一&#xff0c;它的优美简单、快速高效被广泛使用。 Kmeans算法描述 输入&#xff1a;簇的数目k&#xff1b;包含n个对象的数据集D。 输出&#xff1a;k个簇的集合。 方法&#xff1a; 从D中任意选择k个对象作为初始簇中心&#xff1b;repeat;根据簇…...

毕业设计某网站开发的开题报告范文/网站友链查询接口

本文首发于我的博客&#xff1a;刘冲的博客 在阅读C项目&#xff08;caffe&#xff09;源码时&#xff0c;发现不少基类不仅把常规的成员函数定义成虚函数&#xff08;virtual&#xff09;&#xff0c;也会把析构函数定义为虚函数&#xff0c;结合前面几节的介绍&#xff0c;稍…...

周口建设委员会网站信息平台/seo外链怎么发

公众号关注 「奇妙的 Linux 世界」设为「星标」&#xff0c;每天带你玩转 Linux &#xff01;今天给大家推荐一个开源项目&#xff1a;像黑客一样使用命令行。这个开源项目&#xff0c;顾名思义了&#xff0c;就是教大家如何使用命令行的教程。精通命令行用法通常被认为是 Linu…...