初识C语言

  • 什么是C语言
  • 用VS编写第一个C语言程序
  • 数据类型
  • 变量、常量
  • 字符串+转义字符+注释
  • 选择语句
  • 循环语句
  • 函数
  • 数组
  • 操作符
  • 常见关键字
  • #define 定义常量和宏
  • 指针
    • 指针变量的大小
  • 结构体

什么是C语言

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 [1] 目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。

其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

  • 语言指的是人和人交流的语言(eg:汉语,英语,日语……),而计算机语言指的是人和计算机交流的语言(eg:C/C++/JAVA/python/Go……)
  • C语言是广泛应用于底层开发的(eg:OS、驱动程序),还可以应用于上层开发(eg:应用程序、早期的wps就是用C语言写的)
  • C语言是有国际标准的,C语言标准的演变C89、C90、C99、C11……
  • 计算机语言的演变:二进制语言、汇编语言(由助记符(ADD\Sub……)组成)、B语言、C语言。其中早期C语言设计上是有些不足的,C语言被各个厂商修改之后各不相同了,从而在编译器上也就运行不了了,这时就出现了国际标准,它规定C语言是什么标准
  • 编写C语言用的比较流行的编译器有:Clang、GCC、MSVC(微软的vs)
  • VS编译器称为集成开发环境(集成了MSVC这样的编译器),它可以编写以及编译C语言的代码

用VS编写第一个C语言程序

创建项目

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

创建源文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

编写代码

在这里插入图片描述
在这里插入图片描述
注:

  • 编写代码时首先要写出主函数(main函数),因为C语言是从主函数的第一行开始执行的,所以C语言代码中必须得有main函数(入口)
  • printf 是库函数用于在屏幕上打印信息的
  • printf 函数的使用,也需要引用头文件stdio.h

main函数总结:

  • main函数是程序的入口,一个工程中main函数有且仅有一个

  • 当出现程序函数"int main()"已有主体这样的错误时,说明一个工程中出现了多个main函数

  • 一个工程中可以有多个.c文件,但是多个.c文件中只能有一个main函数

编译代码以及运行

在这里插入图片描述

在这里插入图片描述

注意:以上是在VS2019下运行的,如果在VS2013中运行需要注意当运行时会发现程序执行的太快看不到结果,这时需要设置VS2013中的属性(VS2019不需要设置项目属性)

设置项目属性:右击项目->点击属性

在这里插入图片描述

注意:VS2013和VS2019的使用大同小异

数据类型

在这里插入图片描述
出现这么多种的类型,是因为计算机语言在编写程序时需要解决生活中问题,计算机语言必须有能力来描述生活中问题(eg:年龄、体重、收入……)以及类型丰富选择性更多空间利用率更高。

每种类型的大小

int main()
{printf("%d\n", sizeof(char));         //1printf("%d\n", sizeof(short));        //2printf("%d\n", sizeof(int));          //4printf("%d\n", sizeof(long));         //4printf("%d\n", sizeof(long long));    //8printf("%d\n", sizeof(float));        //4printf("%d\n", sizeof(double));       //8printf("%d\n", sizeof(long double));  //8	return 0;
}

注:

  • %d用于打印整数、%lf用于打印double类型、%f用于打印float类型

  • sizeof是关键字也是操作符,用来计算类型或者变量所占空间的大小

  • sizeof的单位是字节byte

  • 二进制由0-1组成、八进制由0-7组成、十进制由0-9组成、十六进制由0-f组成

  • 计算机中最小的单位是bit(比特位),一个比特位是存放一个二进制位的

  • 计算机中的单位由小到大:bit、byte(1byte=8bit)、kb(1kb=1024byte)、mb(1mb=1024kb)、gb(1gb=1024mb)、tb(1tb=1024gb)、pb(1pb=1024gb)、……

  • long和int类型大小相同,这是因为C语言标准规定sizeof(long)>=sizeof(int)即可(在VS中采用的是大小相等)

注意:存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。

变量、常量

常量描述的是不能改变的量
变量描述的是能被改变的量

定义变量的方法

int age = 150;
float weight = 45.5f; 
char ch = 'w';

变量的分类:局部变量、全局变量

局部变量:在大括号内部定义的变量
全局变量:在大括号外部定义的变量

变量的使用

//全局变量 - {}外部定义的
int a = 100;int main()
{//局部变量 - {}内部定义的int a = 10;printf("%d\n", a);return 0;
}

在这里插入图片描述

注意:当局部变量和全局变量名字冲突的情况下,局部优先。不建议把全局变量和局部变量的名字写成一样的

在这里插入图片描述

注意:

  • 当在VS中使用scanf函数时会发生这样的报错在这里插入图片描述
    这时需要在源文件开头(第一行)输入这段代码即可使用scanf函数
#define _CRT_SECURE_NO_WARNINGS 1
  • scanf_s函数是VS编译器提供的,不是C语言标准规定的,因此如果使用了在VS中能跑,但在其他平台就不行了(可移植性太差了),综上使用scanf函数

  • scanf_s函数和scanf函数的使用方法是有区别的

  • 当该文件中添加这句代码时#define _CRT_SECURE_NO_WARNINGS 1,每当创建新源文件时都会有这句代码

VS2019路径:
在这里插入图片描述

VS2013路径:
在这里插入图片描述

变量的作用域和生命周期

作用域

作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。

  1. 局部变量的作用域是变量所在的局部范围。
  2. 全局变量的作用域是整个工程。

注:当在整个工程中一个源文件创建的全局变量(eg:int a=10;)另一个源文件想要使用就需要提前声明该变量(extern int a;)

生命周期

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

  1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  2. 全局变量的生命周期是:整个程序的生命周期。

常量

C语言中的常量分为以下以下几种:

  • 字面常量
int main()
{//字面常量3.14;10;'a';"abcdef";return 0;
}
  • const 修饰的常变量
int main()
{//const修饰的常变量const int num = 10;//num就是常变量 - 具有常属性(不能被改变的属性)return 0;
}

在这里插入图片描述
注意:const修饰的变量是常变量,不是常量,更不能作为数组的元素个数

  • #define 定义的标识符常量
#define MAX 10000
int main()
{// #define 定义的标识符常量//MAX = 20000;//会报错,不能修改int n = MAX; printf("n = %d\n", n); //10000return 0;
}
  • 枚举常量
//性别
enum Sex
{//这种枚举类型的变量的未来可能取值//枚举常量MALE = 3,//赋初值FEMALE,SECRET
};int main()
{//枚举常量可以一一列举的常量enum Sex s = MALE;//MALE = 3;//不能修改,会报错printf("%d\n", MALE);    //3printf("%d\n", FEMALE);  //4printf("%d\n", SECRET);  //5return 0;
}

字符串+转义字符+注释

字符串

由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。

在这里插入图片描述
在这里插入图片描述

%s打印的是字符串,是以\0为结束标志。而arr2数组没有\0因此后面是随机值直到遇到\0结束

在这里插入图片描述

strlen函数是计算字符串的长度(不计入\0),遇到\0结束返回字符串长度

总结:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。

转义字符

转义字符顾名思义就是转变意思(转变他原来的意思)。

下面看一些转义字符:
在这里插入图片描述
补充:

  • 三字母词:??+特殊字符组成的,三个特定字符组成的对应的一个字符(eg:??) -> ] )。要想打印出??+特定的字符需要\ ? \ ?+特定字符这样即可。(现在编译器不支持,不好验证)
  • \ddd:把八进制数转换成十进制之后,以它为ACSII码值代表的那个字符

经典笔试题:

//程序输出什么?
#include <stdio.h>
int main()
{printf("%d\n", strlen("abcdef"));// \32被解析成一个转义字符printf("%d\n", strlen("c:\test\328\test.c"));   //14//c : \t e s t \32 8 \t e s t . creturn 0;
}

注释

  1. 代码中有不需要的代码可以直接删除,也可以注释掉
  2. 代码中有些代码比较难懂,可以加一下注释文字(注释是用来解释复杂代码的)

例如:

在这里插入图片描述

注释有两种风格:

  • C语言风格的注释 /xxxxxx/ 缺陷:不能嵌套注释
  • C++风格的注释 //xxxxxxxx ,可以注释一行也可以注释多行

选择语句

例如:

int main()
{int input = 0;//输入的值printf("好好学习吗(1/0)?>:");scanf("%d", &input);if (input == 1){printf("未来可期\n");}else{ printf("回家种地\n");}return 0;
}

循环语句

例如:

int main()
{printf("变成小白\n");int line = 0;//循环while(line<30000){printf("写代码:%d\n", line);line++;}if (line == 30000){printf("编程大牛\n");}return 0;
}

函数

#include <stdio.h>
int main()
{int num1 = 0;int num2 = 0;int sum = 0;printf("输入两个操作数:>");scanf("%d %d", &a, &b);sum = num1 + num2;printf("sum = %d\n", sum);return 0;
}//上述代码,写成函数如下:
#include <stdio.h>
int Add(int x, int y)
{int z = x+y;return z;
}
int main()
{int num1 = 0;int num2 = 0;int sum = 0;printf("输入两个操作数:>");scanf("%d %d", &num1, &num2);sum = Add(num1, num2);printf("sum = %d\n", sum);return 0;
}

注意:

  • 函数的特点就是简化代码,代码复用,减少代码冗余
  • 一般不建议把函数的名字写成全大写

数组

数组是一组相同类型的元素的集合

数组的定义:

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素

数组的使用:

int main()
{//数组 - 一组相同类型的元素的集合//数组是用下标来访问的,从0下标开始//10个整形1-10存起来int arr[10] = {1,2,3,4,5,6,7,8,9,10};int i = 0;while (i < 10){printf("%d ", arr[i]);i++;}char ch[5] = {'a', 'b', 'c'};//不完全初始化,剩余的默认为0return 0;
}

注:这样写int arr[3];只是创建了数组arr并未初始化数组元素的值

在这里插入图片描述
上面这样初始化是错误的

补充:
在这里插入图片描述
注意:在C99 标准中引用一个概念—变长数组(支持数组创建的时候,用变量指定大小的,但是这个数组不能初始化),但是VS2019 不支持C99中的变长数组

操作符

算术操作符

+  -  *  /  %

/号两端如果都是整数执行整数除法(无论用什么类型存储结果)。/号两端有一端是小数则执行小数除法

移位操作符

>>   <<

移位操作符:移动的是二进制位。如果是左移操作符空缺位永远补0

位操作符

& ^ |

赋值操作符

= += -= *= /= &= ^= |= >>= <<=

单目操作符

  • ! 逻辑反操作 应用于条件判断
  • -负值
  • +正值
  • & 取地址
  • sizeof 操作数的类型长度(以字节为单位)
  • ~ 对一个数的二进制按位取反
  • – 前置、后置–
  • ++ 前置、后置++
  • *间接访问操作符(解引用操作符)
  • (类型) 强制类型转换

双目操作符指的是有两个操作数;单目操作符指的是只有一个操作数
C语言规定:0表示假,非0表示真;如果一个数为0那么对这个数进行逻辑反操作那么这个数是1

sizeof的使用:
在这里插入图片描述

在这里插入图片描述

~的使用:
在这里插入图片描述

  1. ~按(二进制)位取反是把所有二进制位中数字(包括符号位)由1变成0,0变成1
  2. 整数在内存中存储的是按补码的形式存储的,%d打印的是原码
  3. 一个整数的二进制表示有三种:原码、反码、补码
  4. 正整数的原码、反码、补码相同,而负整数的原码和正整数的低31位比特位一致,符号位由0变为1;反码是将除符号位之外的所有比特位按位取反;补码是将反码加1

前置++和后置++的使用:
在这里插入图片描述
前置–、后置–和前置++、后置++的使用一样

int main()
{int a = 1;int b = (++a) + (++a) + (++a);//12printf("%d\n", b);return 0;
}

注意:上面的代码是有错误的不建议去研究,因为在不同编译器上运行结果可能是不同的,VS下运行结果是12

强制类型转换的使用:
在这里插入图片描述
注意:如果想要避免警告,需要使用强制类型转换。不推荐去使用(因为要使用强制类型转换说明设计有缺陷)

关系操作符

在这里插入图片描述

逻辑操作符

  • && 逻辑与
  • || 逻辑或

逻辑与是所有条件都为真时,结果才为真,否则就为假;逻辑或是只要有一个事件为真,结果就为真,否为为假

条件操作符(三目操作符)

exp1 ? exp2 : exp3

exp1成立,exp2计算,整个表达式的结果是exp2的结果;exp1不成立,exp3计算,整个表达式的结果是exp3的结果。

条件操作符的使用:

逗号表达式

exp1, exp2, exp3, …expN

逗号表达式是逗号隔开的一串表达式

逗号表达式的使用:

int main()
{(2, 4 + 5, 6);   //逗号表达式int a = 0;int b = 3;int c = 5;//a=5       c=1        b=3int d = (a = b + 2, c = a - 4, b = c + 2);//逗号表达式,是从左向右依次计算的//整个表达式的结果是最后一个表达式的结果printf("%d\n", d);  //3return 0;
}

注:逗号表达式是从左向右依次计算的,整个表达式的结果是最后一个表达式的结果。

下标引用、函数调用和结构成员

[] () . ->

下标引用、函数调用操作符的使用:
在这里插入图片描述

注:. -> * &下面会提到

常见关键字

  • auto break case char const continue default do double else enum
  • extern float for goto if int long register return short signed
  • sizeof static struct switch typedef union unsigned void volatile while

常见关键字需要注意的事项:

  1. C语言提供的,不能自己创建关键字
  2. 变量名不能是关键字

auto关键字

auto是自动变量,每个局部变量(自动创建自动销毁的)都是auto修饰的自动变量,基本都省略掉了。

auto的使用:

auto int a=10;

注:auto 新的C语言语法中也有其他用法 ( 暂时不考虑)

extern关键字

extern是用来声明外部符号的

extern关键字的使用:
在这里插入图片描述

在这里插入图片描述

注:

  • 声明变量的时候不需要它的值,只要指定名字和类型即可
  • 声明函数的时候写不写函数参数名都行,只要指定函数名和返回类型以及函数参数类型即可

register关键字(寄存器关键字)

register寄存器关键字作用是用register创建的变量建议把它放到寄存器里,具体将变量放不放进去由编译器说了算,register只是起到建议的作用

register关键字的使用:

register int num = 100;//建议num的值存放在寄存器中

注意:register关键字的应用-——大量频繁被使用的数据想放在寄存器中,目的是提升效率。目前编译器比较智能了,它会自动判断该变量是否需要放入寄存器中

补充:

  • 计算机中数据可以存储到以下中去:
    在这里插入图片描述
    注意:这样设计目的是提高CPU的计算速度,提高效率(早期CPU计算数据通过从内存中拿数据,而内存访问存储数据的效率相比于CPU太低了,从而导致CPU计算效率的降低)

signed关键字

signed有符号的 ;unsigned 无符号的

typedef关键字

typedef 顾名思义是类型定义,这里应该理解为类型重命名(类型重定义)。

typedef关键字的使用:

typedef unsigned int u_int;
//将unsigned int 重命名为u_int, 所以u_int也是一个类型名
int main()
{unsigned int num = 100;u_int num2 = 100;return 0;
}

static关键字

在C语言中static是用来修饰变量和函数的(static - 静态的)

static关键字的使用:

static修饰局部变量
在这里插入图片描述
static修饰局部变量,改变了局部变量的生命周期(本质上是改变了变量的存储类型)

static修饰全局变量
在这里插入图片描述
static修饰全局变量,使得这个全局变量只能在自己所在的源文件(.c)内部可以使用,而其他源文件不能使用

static修饰函数

在这里插入图片描述
static修饰函数,使得函数只能在自己所在的源文件内部使用,不能在其他源文件内部使用。本质上static是将函数的外部链接属性变成了内部链接属性(和static修饰全局变量一样)

注:

  • 栈区用来存储局部变量和函数参数、堆区用来动态内存分配的、静态区用来存储全局变量和static修饰的静态变量
  • 静态变量的生命周期跟全局变量的生命周期一样
  • 全局变量在其他源文件内部可以被使用是因为全局变量具有外部链接属性,但是被static修饰之后就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了

总结;

  • static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
  • 一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。
  • 一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

union关键字

union - 联合体(共用体)

void关键字

void - 无、空

注意:

  • define不是关键字是预处理指令 ,使用方法 #define
  • include不是关键字是预处理指令,使用方法 #include

#define 定义常量和宏

define 是一个预处理指令

作用一:define定义标识符常量(define定义符号)

#define MAX 1000  //MAX也可称为符号int main()
{printf("%d\n", MAX);return 0;
}

作用二:define定义宏


//define 定义宏
#define ADD(X,Y) ((X)+(Y))int main()
{printf("%d\n", 4*ADD(2, 3));return 0;
}

指针

内存

内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的 。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

在这里插入图片描述

注:

  • 内存编号是通过地址线,地址线通电产生电信号转换成数字信号,对应的二进制序列就是内存地址(编号称为地址)
  • 一个内存单元是一个字节

取出变量地址(&操作符)以及定义指针变量:
在这里插入图片描述
指针的使用实例(*操作符):

//指针 就是 地址int main()
{int a = 10;int* pa = &a;*pa = 20;//* 解引用操作 , *pa就是通过pa里边的地址,找到a并对a进行操作printf("%d\n", a);return 0;
}

指针变量的大小

在这里插入图片描述
总结:指针的大小是相同的。因为指针是用来存储地址的,指针需要多大空间取决于地址的存储需要多大空间。在32位机器上其实是32个比特位组成的二进制序列作为地址(存储需4字节);在64位机器上其实是64个比特位组成的二进制序列作为地址(存储需8字节)

注:指针大小在32位平台(x86)是4个字节,64位平台(x64)是8个字节。

结构体

结构体使得C语言有能力描述复杂类型。比如描述学生,学生包含: 名字+年龄+成绩 这几项信息。这里只能使用结构体来描述了。

结构体的创建:

//结构体可以让C语言创建新的类型出来//创建一个学生struct Stu
{char name[20];//成员变量int age;double score;
};//创建一个书的类型
struct Book
{char name[20];float price;char id[30];
};

结构体的初始化以及.操作符和->操作符的使用:

//结构体可以让C语言创建新的类型出来//创建一个学生struct Stu
{char name[20];//成员变量int age;double score;
};//创建一个书的类型
struct Book
{char name[20];float price;char id[30];
};int main()
{struct Stu s = { "张三", 20, 85.5 };//结构体的创建和初始化printf("1: %s %d %lf\n", s.name, s.age, s.score);//结构体变量.成员变量名struct Stu* ps = &s;printf("2: %s %d %lf\n", (*ps).name, (*ps).age, (*ps).score);printf("3: %s %d %lf\n", ps->name, ps->age, ps->score);  //结构体指针->成员变量名return 0;
}

注:.和->用于访问和修改结构体中成员变量的值

C语言—初识C语言

相关文章

  1. 什么才是真正的“企业数字化转型”?

    数字化转型是当今企业发展的关键词之一&#xff0c;它不仅仅是一个技术工具或平台&#xff0c;更是一种战略思维和组织文化的转变。因此&#xff0c;真正的企业数字化转型不仅仅是简单的技术升级&#xff0c;而是需要全方位地考虑组织结构、文化、流程、技术和数据等方面的变革…...

    2023/3/28 17:45:52
  2. 51单片机(串口通信、蓝牙)

    一、串口 1、串口认知 串行接口简称串口&#xff0c;也称串行通信接口或串行通讯接口&#xff08;通常指COM接口&#xff09;&#xff0c;是采用串行通信方 式的扩展接口。串行接口&#xff08;Serial Interface&#xff09;是指数据一位一位地顺序传送。其特点是通信线路简 …...

    2023/3/28 17:43:46
  3. 无损压缩监控视频解决方案

    从法院庭审、银行网点、智慧工地、城市道路这些场所&#xff0c;都需要每时每刻都需要监控摄像头进行监控。那么&#xff0c;根据有些要求&#xff0c;这些监控摄像头产生的视频数据&#xff0c;应该怎么长时间保存&#xff1f;云存储肯定是不行的&#xff0c;因为太不安全及方…...

    2023/3/28 17:41:59
  4. 代码随想录|day24|回溯算法part01-----------77.组合

    77. 组合 链接&#xff1a;https://leetcode.cn/problems/combinations/ 题目&#xff1a; 代码&#xff1a;最佳答案是labuladong的答案&#xff0c;我调整了一些参数&#xff0c;start_index和下一层的关系一定要搞清楚。 自己画的图&#xff1a; k 限制了树的高度&#xff0…...

    2023/3/28 17:37:23
  5. Redis 官方可视化工具-RedisInsight

    Redis 官方可视化工具-RedisInsight 最近逛了一下Redis官方网站&#xff0c;发现Redis不仅推出了很多新特性&#xff0c;而且还发布了一款可视化工具RedisInsight。试用了一下感觉非常不错&#xff0c;最关键的是能支持RedisJSON之类的新特性&#xff0c;这是第三方工具无法比拟…...

    2023/3/28 17:34:17
  6. kingdee 物料属性

    1、自制 物料属性为自制,表明该物料是企业自己生产制造出的产成品。 在系统中&#xff0c;自制件一般可以进行BOM设置&#xff0c;自制件可以设置为父项&#xff0c;也可以设置为子项。 2、外购 物料属性为外购&#xff0c;是指为进行生产产品或者提供维护等原因而从供应商处取…...

    2023/3/28 17:34:04
  7. Tomcat 内部运行原理(一)

    文章目录 一、目的宏观上看微观上看宏观理解一个请求如何与 Spring 联系起来提升自己的系统设计能力二、整体架构设计连接器封装变与不变ProtocolHandler 组件EndPointProcessorAdapter 组件容器一、目的 宏观上看 Tomcat 作为一个 「Http 服务器 + Servlet 容器」,对我们屏…...

    2023/3/28 17:33:03
  8. 3.27日报

    修改月更新漏洞 Calendar 类 是一个抽象类&#xff0c;它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法&#xff0c;并为操作日历字段&#xff08;例如获得下星期的日期&#xff09;提供了一些方法。 创建一个代表系统当前日期的…...

    2023/3/28 17:30:38
  9. 栈的数据结构

    一、栈的概念及结构 1.栈的概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原…...

    2023/3/28 17:29:45
  10. 机器学习(四十七):万字可视化终极篇

    在下面的文章中,我将介绍可视化机器学习工具,并提供代码示例来创建一些最常见的机器学习可视化。 文章目录 混淆矩阵ROC-AUC图精确度-召回曲线手肘图残差图排名特征图分类平衡图验证曲线学习曲线特征重要性雷达可视化分类评估更多详细说明混淆矩阵 混淆矩阵是一种直观地评估…...

    2023/3/28 17:28:43
  11. 数据分发服务 (DDS)及Fast DDS环境搭建

    1. 数据分发服务 (DDS) 数据分发服务 (DDS)是一种以 数据为中心的通信协议&#xff0c;用于分布式软件应用程序通信。它描述了支持数据提供者和数据消费者之间通信的通信应用程序编程接口 (API) 和通信语义。 由于它是一个以数据为中心的发布订阅 (DCPS) 模型&#xff0c;因此…...

    2023/3/28 17:26:45
  12. 172_再谈 Power BI 客户帕累托(ABC)分析度量值写法

    172_再谈 Power BI 客户帕累托(ABC)分析度量值写法 一、背景 我们再来谈一谈帕累托在 Power BI 中的度量值写法。我们分别使用以RANKX 和 WINDOW 两个函数为核心写度量值。 按照惯例&#xff0c;我们先看一下示例结果。 Power BI 公共 web 效果&#xff1a;https://demo.jia…...

    2023/3/28 17:25:56
  13. AI Tool 免责申明

    AI Tool 免责申明 在使用本网站提供的 AI Tool 体验站服务前&#xff0c;请您务必仔细阅读并理解本《免责声明》&#xff08;以下简称“本声明”&#xff09;。请您知悉&#xff0c;如果您选择继续访问本网站、或使用本网站提供的本服务以及通过各类方式利用本网站的行为&…...

    2023/3/28 17:21:04
  14. Linux - 第9节 - Linux多线程

    1.Linux线程概念 1.1.线程的概念 书本中对线程的描述&#xff1a; 1.在进程内部运行的执行流 2.线程比进程粒度更细&#xff0c;调度成本更低 3.线程是CPU调度的基本单位 注&#xff1a;上面的说法都没有问题&#xff0c;这里我们以Linux内核的角度切入来讲解线程。 线程的概念…...

    2023/3/28 17:20:19
  15. mysql以txt文本方式快速导入导出百万数据

    1.先查看有没有设置权限 如果没有权限&#xff0c;会出现&#xff1a; The MySQL server is running with the --secure-file-priv option so it cannot execute this statement show variables like %secure%; # 查看 secure-file-priv 当前的值是什么 show variables like …...

    2023/3/28 17:20:07
  16. 结合 Casbin 对 http 请求做 RBAC 鉴权以及添加请求路由参数支持

    目录 总结 背景 实操 安装 Casbin 创建一个 Casbin 模型 创建一个 Casbin 策略 加载 Casbin 模型和策略并创建一个路由 总结 在本文中&#xff0c;我们将介绍如何结合 Casbin 对 HTTP 请求进行基于角色的访问控制 (RBAC) 鉴权&#xff0c;并支持请求路由参数。我们将使用…...

    2023/3/28 17:19:54
  17. Pytorch : 自动求导

    在训练神经网络时&#xff0c;最常用的算法是反向传播算法。在该算法中&#xff0c;参数(模型权重)根据损失函数相对于给定参数的梯度进行调整。损失函数计算神经网络产生的期望输出和实际输出之间的差值。目标是使损失函数的结果尽可能接近于零。该算法通过网络反向遍历来调整…...

    2023/3/28 17:19:30
  18. 每周一算法:高精度加法

    高精度数值处理 在C++中,数值的加减乘除运算都已经在系统内部被定义好了,我们可以很方便的对两个变量进行简单运算。但其中变量的取值范围,各不相同,以整数为例,最大的是long long类型,范围是 [ − 2 63 , 2 63 ) [-2^{63},2^{63}) [−2...

    2023/3/28 17:19:20
  19. 神经网络可视化工具netron安装教程

    文章目录一. netron简介二. 不同操作系统下的安装使用方式2.1 在线版本&#xff1a;只要浏览器就可以2.2 不同操作系统安装使用三. netron支持的网络框架一. netron简介 在实际的项目中&#xff0c;经常会遇到各种网络模型&#xff0c;需要我们快速去了解网络结构。如果单纯的…...

    2023/3/28 17:19:02
  20. 信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

    文章目录概述什么是JS渗透测试&#xff1f;例子JS安全问题流行的Js框架有那些&#xff1f;如何判定JS开发应用&#xff1f;如何获取更多的JS文件&#xff1f;前端架构-手工搜索分析前端架构-半自动Burp分析自带功能官方插件第三方插件前端架构-自动化项目分析Jsfinder-从表现中…...

    2023/3/28 17:17:05
  21. 【Unity游戏开发教程】零基础带你从小白到超神28——反向动力学

    什么是反向动力学 一般我们都是通过父节点来调动子节点运动,而在实际开发过程中,有时候我们需要子节点带动父节点进行相应的动作。这种情况就是反向动力学。其实在国内的游戏中很少看见IK动画,一般而言国外的游戏较多。 通俗讲:就是使用场景中的各种物体来控制和影响角色身…...

    2023/3/28 17:15:47
  22. Leveldb源码解读------Memtable(跳表)详解

    在leveldb中的memtable实际上是对核心数据结构skipList做了一个包装&#xff0c;并对外提供了接口。 使用让我们一起来研究一下跳表 为什么使用跳表 因为memtable为了更快的查询&#xff0c;是一个sortmap要求。一般会采用红黑树&#xff0c;不过LevelDB采用的是Skiplist。S…...

    2023/3/28 17:15:12
  23. Git统计项目成员代码提交量

    目录 一、前言 二、Git Bash 三、统计信息 1.统计某项目中成员数量 2.统计所有用户的提交总次数 3.统计所有用户指定时间段的提交次数 4.按用户名统计提交次数 完整脚本如下 一、前言 项目中有很多成员&#xff0c;如何查看各个时间段每个组员的代码提交量&#xff0c;下…...

    2023/3/28 17:11:01
  24. Vue实现单页缓存,下一页刷新

    vue单页缓存实现方案分析 实现前进刷新&#xff0c;返回不刷新的功能&#xff0c;并且返回时可以记住上一页的滚动位置&#xff0c;有两套方案可选 方案一&#xff1a;vue的keep-alive组件 具体使用如下&#xff1a; <keep-alive max"10"><router-view…...

    2023/3/28 17:09:36
  25. Downie 4 4.6.12 MAC上最好的一款视频下载工具

    Downie for Mac 简介 Downie是Mac下一个简单的下载管理器&#xff0c;可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们。 Downie 4 Downie 4 for Mac Downie 4 for Mac软件特点 支持许多站点 -当前支持1000多个不同的站点&…...

    2023/3/28 17:03:43
  26. vscode搭建Django环境五:vscode配置react开发环境

    1、安装node 请在官网下载安装&#xff1a;https://nodejs.org/zh-cn/vscode 中新建终端输入指令node -v&#xff0c;能显示版本号&#xff0c;说明 node 已经装好了输入指令npm -v&#xff0c;能显示版本号&#xff0c;说明 npm 可以使用了 nodejs安装参考&#xff1a;https…...

    2023/3/28 17:03:28
  27. TiDB入门篇-数据物理备份和恢复

    简介 快照备份是集群全量备份的一种实现。它基于 TiDB 的多版本并发控制 (MVCC) 实现&#xff0c;将指定快照包含的所有数据备份到目标存储中。备份下来的数据大小约等于集群&#xff08;压缩后的&#xff09;单副本数据大小。备份完成之后&#xff0c;你可以在一个空集群或不…...

    2023/3/28 17:02:48
  28. 电脑录屏怎么录?超详细的录屏教程来了

    案例&#xff1a;电脑录屏怎么录&#xff1f;求详细的电脑录屏教程&#xff01; “最近的工作需要用到电脑录屏&#xff0c;但是我不知道电脑录屏怎么录&#xff1f;去网上搜索了一下教程都是比较大概的&#xff0c;我这个新手小白根本看不懂。在这里想问问大家&#xff0c;有…...

    2023/3/28 17:02:09
  29. 从0使用TCP手撸http服务器一

    背景介绍&#xff1a; 成熟的http服务器框架非常多&#xff0c;例如SB,flask,.net.....这些框架基本上都是运行在操作系统之上&#xff0c;非常的高级。但是我们做嵌入式的望尘莫及&#xff01;当然如果是linux的设备&#xff0c;可能还能用上轻量级的http服务器框架&#xff0…...

    2023/3/28 17:01:16
  30. Linux- 浅谈ELF目标文件格式

    理解了进程的描述和创建之后&#xff0c;自然会想到我们编写的可执行程序是如何作为一个进程工作的&#xff1f;这就涉及可执行文件的格式、编译、链接和装载等相关知识。 这里先提一个常见的名词“目标文件”&#xff0c;是指编译器生成的文件。“目标”指目标平台&#xff0c…...

    2023/3/28 16:59:58

最新文章

  1. 什么才是真正的“企业数字化转型”?

    数字化转型是当今企业发展的关键词之一&#xff0c;它不仅仅是一个技术工具或平台&#xff0c;更是一种战略思维和组织文化的转变。因此&#xff0c;真正的企业数字化转型不仅仅是简单的技术升级&#xff0c;而是需要全方位地考虑组织结构、文化、流程、技术和数据等方面的变革…...

    2023/3/28 17:45:52
  2. 51单片机(串口通信、蓝牙)

    一、串口 1、串口认知 串行接口简称串口&#xff0c;也称串行通信接口或串行通讯接口&#xff08;通常指COM接口&#xff09;&#xff0c;是采用串行通信方 式的扩展接口。串行接口&#xff08;Serial Interface&#xff09;是指数据一位一位地顺序传送。其特点是通信线路简 …...

    2023/3/28 17:43:46
  3. 无损压缩监控视频解决方案

    从法院庭审、银行网点、智慧工地、城市道路这些场所&#xff0c;都需要每时每刻都需要监控摄像头进行监控。那么&#xff0c;根据有些要求&#xff0c;这些监控摄像头产生的视频数据&#xff0c;应该怎么长时间保存&#xff1f;云存储肯定是不行的&#xff0c;因为太不安全及方…...

    2023/3/28 17:41:59
  4. 代码随想录|day24|回溯算法part01-----------77.组合

    77. 组合 链接&#xff1a;https://leetcode.cn/problems/combinations/ 题目&#xff1a; 代码&#xff1a;最佳答案是labuladong的答案&#xff0c;我调整了一些参数&#xff0c;start_index和下一层的关系一定要搞清楚。 自己画的图&#xff1a; k 限制了树的高度&#xff0…...

    2023/3/28 17:37:23
  5. Redis 官方可视化工具-RedisInsight

    Redis 官方可视化工具-RedisInsight 最近逛了一下Redis官方网站&#xff0c;发现Redis不仅推出了很多新特性&#xff0c;而且还发布了一款可视化工具RedisInsight。试用了一下感觉非常不错&#xff0c;最关键的是能支持RedisJSON之类的新特性&#xff0c;这是第三方工具无法比拟…...

    2023/3/28 17:34:17
  6. kingdee 物料属性

    1、自制 物料属性为自制,表明该物料是企业自己生产制造出的产成品。 在系统中&#xff0c;自制件一般可以进行BOM设置&#xff0c;自制件可以设置为父项&#xff0c;也可以设置为子项。 2、外购 物料属性为外购&#xff0c;是指为进行生产产品或者提供维护等原因而从供应商处取…...

    2023/3/28 17:34:04
  7. Tomcat 内部运行原理(一)

    文章目录 一、目的宏观上看微观上看宏观理解一个请求如何与 Spring 联系起来提升自己的系统设计能力二、整体架构设计连接器封装变与不变ProtocolHandler 组件EndPointProcessorAdapter 组件容器一、目的 宏观上看 Tomcat 作为一个 「Http 服务器 + Servlet 容器」,对我们屏…...

    2023/3/28 17:33:03
  8. 3.27日报

    修改月更新漏洞 Calendar 类 是一个抽象类&#xff0c;它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法&#xff0c;并为操作日历字段&#xff08;例如获得下星期的日期&#xff09;提供了一些方法。 创建一个代表系统当前日期的…...

    2023/3/28 17:30:38
  9. 栈的数据结构

    一、栈的概念及结构 1.栈的概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原…...

    2023/3/28 17:29:45
  10. 机器学习(四十七):万字可视化终极篇

    在下面的文章中,我将介绍可视化机器学习工具,并提供代码示例来创建一些最常见的机器学习可视化。 文章目录 混淆矩阵ROC-AUC图精确度-召回曲线手肘图残差图排名特征图分类平衡图验证曲线学习曲线特征重要性雷达可视化分类评估更多详细说明混淆矩阵 混淆矩阵是一种直观地评估…...

    2023/3/28 17:28:43
  11. 数据分发服务 (DDS)及Fast DDS环境搭建

    1. 数据分发服务 (DDS) 数据分发服务 (DDS)是一种以 数据为中心的通信协议&#xff0c;用于分布式软件应用程序通信。它描述了支持数据提供者和数据消费者之间通信的通信应用程序编程接口 (API) 和通信语义。 由于它是一个以数据为中心的发布订阅 (DCPS) 模型&#xff0c;因此…...

    2023/3/28 17:26:45
  12. 172_再谈 Power BI 客户帕累托(ABC)分析度量值写法

    172_再谈 Power BI 客户帕累托(ABC)分析度量值写法 一、背景 我们再来谈一谈帕累托在 Power BI 中的度量值写法。我们分别使用以RANKX 和 WINDOW 两个函数为核心写度量值。 按照惯例&#xff0c;我们先看一下示例结果。 Power BI 公共 web 效果&#xff1a;https://demo.jia…...

    2023/3/28 17:25:56
  13. AI Tool 免责申明

    AI Tool 免责申明 在使用本网站提供的 AI Tool 体验站服务前&#xff0c;请您务必仔细阅读并理解本《免责声明》&#xff08;以下简称“本声明”&#xff09;。请您知悉&#xff0c;如果您选择继续访问本网站、或使用本网站提供的本服务以及通过各类方式利用本网站的行为&…...

    2023/3/28 17:21:04
  14. Linux - 第9节 - Linux多线程

    1.Linux线程概念 1.1.线程的概念 书本中对线程的描述&#xff1a; 1.在进程内部运行的执行流 2.线程比进程粒度更细&#xff0c;调度成本更低 3.线程是CPU调度的基本单位 注&#xff1a;上面的说法都没有问题&#xff0c;这里我们以Linux内核的角度切入来讲解线程。 线程的概念…...

    2023/3/28 17:20:19
  15. mysql以txt文本方式快速导入导出百万数据

    1.先查看有没有设置权限 如果没有权限&#xff0c;会出现&#xff1a; The MySQL server is running with the --secure-file-priv option so it cannot execute this statement show variables like %secure%; # 查看 secure-file-priv 当前的值是什么 show variables like …...

    2023/3/28 17:20:07
  16. 结合 Casbin 对 http 请求做 RBAC 鉴权以及添加请求路由参数支持

    目录 总结 背景 实操 安装 Casbin 创建一个 Casbin 模型 创建一个 Casbin 策略 加载 Casbin 模型和策略并创建一个路由 总结 在本文中&#xff0c;我们将介绍如何结合 Casbin 对 HTTP 请求进行基于角色的访问控制 (RBAC) 鉴权&#xff0c;并支持请求路由参数。我们将使用…...

    2023/3/28 17:19:54
  17. Pytorch : 自动求导

    在训练神经网络时&#xff0c;最常用的算法是反向传播算法。在该算法中&#xff0c;参数(模型权重)根据损失函数相对于给定参数的梯度进行调整。损失函数计算神经网络产生的期望输出和实际输出之间的差值。目标是使损失函数的结果尽可能接近于零。该算法通过网络反向遍历来调整…...

    2023/3/28 17:19:30
  18. 每周一算法:高精度加法

    高精度数值处理 在C++中,数值的加减乘除运算都已经在系统内部被定义好了,我们可以很方便的对两个变量进行简单运算。但其中变量的取值范围,各不相同,以整数为例,最大的是long long类型,范围是 [ − 2 63 , 2 63 ) [-2^{63},2^{63}) [−2...

    2023/3/28 17:19:20
  19. 神经网络可视化工具netron安装教程

    文章目录一. netron简介二. 不同操作系统下的安装使用方式2.1 在线版本&#xff1a;只要浏览器就可以2.2 不同操作系统安装使用三. netron支持的网络框架一. netron简介 在实际的项目中&#xff0c;经常会遇到各种网络模型&#xff0c;需要我们快速去了解网络结构。如果单纯的…...

    2023/3/28 17:19:02
  20. 信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目

    文章目录概述什么是JS渗透测试&#xff1f;例子JS安全问题流行的Js框架有那些&#xff1f;如何判定JS开发应用&#xff1f;如何获取更多的JS文件&#xff1f;前端架构-手工搜索分析前端架构-半自动Burp分析自带功能官方插件第三方插件前端架构-自动化项目分析Jsfinder-从表现中…...

    2023/3/28 17:17:05
  21. 【Unity游戏开发教程】零基础带你从小白到超神28——反向动力学

    什么是反向动力学 一般我们都是通过父节点来调动子节点运动,而在实际开发过程中,有时候我们需要子节点带动父节点进行相应的动作。这种情况就是反向动力学。其实在国内的游戏中很少看见IK动画,一般而言国外的游戏较多。 通俗讲:就是使用场景中的各种物体来控制和影响角色身…...

    2023/3/28 17:15:47
  22. Leveldb源码解读------Memtable(跳表)详解

    在leveldb中的memtable实际上是对核心数据结构skipList做了一个包装&#xff0c;并对外提供了接口。 使用让我们一起来研究一下跳表 为什么使用跳表 因为memtable为了更快的查询&#xff0c;是一个sortmap要求。一般会采用红黑树&#xff0c;不过LevelDB采用的是Skiplist。S…...

    2023/3/28 17:15:12
  23. Git统计项目成员代码提交量

    目录 一、前言 二、Git Bash 三、统计信息 1.统计某项目中成员数量 2.统计所有用户的提交总次数 3.统计所有用户指定时间段的提交次数 4.按用户名统计提交次数 完整脚本如下 一、前言 项目中有很多成员&#xff0c;如何查看各个时间段每个组员的代码提交量&#xff0c;下…...

    2023/3/28 17:11:01
  24. Vue实现单页缓存,下一页刷新

    vue单页缓存实现方案分析 实现前进刷新&#xff0c;返回不刷新的功能&#xff0c;并且返回时可以记住上一页的滚动位置&#xff0c;有两套方案可选 方案一&#xff1a;vue的keep-alive组件 具体使用如下&#xff1a; <keep-alive max"10"><router-view…...

    2023/3/28 17:09:36
  25. Downie 4 4.6.12 MAC上最好的一款视频下载工具

    Downie for Mac 简介 Downie是Mac下一个简单的下载管理器&#xff0c;可以让您快速将不同的视频网站上的视频下载并保存到电脑磁盘里然后使用您的默认媒体播放器观看它们。 Downie 4 Downie 4 for Mac Downie 4 for Mac软件特点 支持许多站点 -当前支持1000多个不同的站点&…...

    2023/3/28 17:03:43
  26. vscode搭建Django环境五:vscode配置react开发环境

    1、安装node 请在官网下载安装&#xff1a;https://nodejs.org/zh-cn/vscode 中新建终端输入指令node -v&#xff0c;能显示版本号&#xff0c;说明 node 已经装好了输入指令npm -v&#xff0c;能显示版本号&#xff0c;说明 npm 可以使用了 nodejs安装参考&#xff1a;https…...

    2023/3/28 17:03:28
  27. TiDB入门篇-数据物理备份和恢复

    简介 快照备份是集群全量备份的一种实现。它基于 TiDB 的多版本并发控制 (MVCC) 实现&#xff0c;将指定快照包含的所有数据备份到目标存储中。备份下来的数据大小约等于集群&#xff08;压缩后的&#xff09;单副本数据大小。备份完成之后&#xff0c;你可以在一个空集群或不…...

    2023/3/28 17:02:48
  28. 电脑录屏怎么录?超详细的录屏教程来了

    案例&#xff1a;电脑录屏怎么录&#xff1f;求详细的电脑录屏教程&#xff01; “最近的工作需要用到电脑录屏&#xff0c;但是我不知道电脑录屏怎么录&#xff1f;去网上搜索了一下教程都是比较大概的&#xff0c;我这个新手小白根本看不懂。在这里想问问大家&#xff0c;有…...

    2023/3/28 17:02:09
  29. 从0使用TCP手撸http服务器一

    背景介绍&#xff1a; 成熟的http服务器框架非常多&#xff0c;例如SB,flask,.net.....这些框架基本上都是运行在操作系统之上&#xff0c;非常的高级。但是我们做嵌入式的望尘莫及&#xff01;当然如果是linux的设备&#xff0c;可能还能用上轻量级的http服务器框架&#xff0…...

    2023/3/28 17:01:16
  30. Linux- 浅谈ELF目标文件格式

    理解了进程的描述和创建之后&#xff0c;自然会想到我们编写的可执行程序是如何作为一个进程工作的&#xff1f;这就涉及可执行文件的格式、编译、链接和装载等相关知识。 这里先提一个常见的名词“目标文件”&#xff0c;是指编译器生成的文件。“目标”指目标平台&#xff0c…...

    2023/3/28 16:59:58