由浅到深认识C语言(2):C语言的类型及语句

该文章Github地址:https://github.com/AntonyCheng/c-notes

在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn.net/AntonyCheng/article/details/136555245),该模板集成了最常见的开发组件,同时基于修改配置文件实现组件的装载,除了这些,模板中还有非常丰富的整合示例,同时单体架构也非常适合SpringBoot框架入门,如果觉得有意义或者有帮助,欢迎Star & Issues & PR!

上一章:由浅到深认识C语言(1):C语言概论

2.C语言的类型及语句

二进制基础:

  1. 计算机存储的是二进制,一位二进制只能存放一个0或1:1b
  2. 1B(字节) == 8b(8位二进制) :0000 0000 ~ 1111 1111
  3. 1KB == 1024B;1MB == 1024KB;1GB == 1024MB;1TB == 1024GB;1PB == 1024TB

数据类型基础:

数据类型所占内存
char(字符类型)1B == 8b
short(短整型)2B == 16b
int(整型)4B == 32b
long(长整型)4B == 32b
long long(长长整形)8B == 64b
float(单精度浮点型)4B == 32b
double(双精度浮点型)8B == 64b

案例(验证数据类型的长度):sizeof能够测量数据类型的长度

#include<stdio.h>
int main(int argc, char *argv[])
{printf("sizeof(char)=%dB\n", sizeof(char));printf("sizeof(short)=%dB\n", sizeof(short));printf("sizeof(int)=%dB\n", sizeof(int));printf("sizeof(long)=%dB\n", sizeof(long));printf("sizeof(long long)=%dB\n", sizeof(long long));printf("sizeof(float)=%dB\n", sizeof(float));printf("sizeof(double)=%dB\n", sizeof(double));return 0;
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有符号数和无符号数(unsigned和signed)

  1. 无符号数 unsigned:数据没有符号位,自身的所有二进制位都是数据位

    比如:unsigned char -------- 0000 0000~1111 1111

  2. 有符号数 signed(默认一般省略):二进制最高位为符号位,其他位为数据位

    比如:signed char -------- xxxx xxxx (x为0或1)

    负数:1xxx xxxx

    正数:0xxx xxxx

    所以表示范围是:1111 1111 ~ 1000 0000 ~ 0000 0000 ~ 0111 1111

案例(进制的转换):

#include<stdio.h>
#define MAX 32
int main(int argc, char *argv[])
{int i = 0, n, a[MAX];printf("请输入一个十进制数:");scanf_s("%d", &n);while (n > 0) {a[i] = n % 2;i = i + 1;n = n / 2;}printf("十进制整数转化为二进制数是:");for (; i > 0; i--)printf("%d", a[i - 1]);printf("\n");return 0;
}

案例(有无符号的数据展示):

#include<stdio.h>
int main(int argc, char* argv[])
{//以下这两种定义意思相同,都是有符号的intsigned int num1 = 10;int num2 = 10;//(推荐)//下面这一种定义是无符号的intunsigned int num3 = 10;return 0;
}

2.1.C语言关键字(32个)

数据类型关键字(12个):(数据类型存在的意义是合理分配程序的内存)
{ c h a r − 字 符 类 型 s h o r t − 短 整 型 i n t − 整 型 l o n g − 长 整 型 f l o a t − 单 精 度 浮 点 型 d o u b l e − 双 精 度 浮 点 型 u n s i g n e d − 无 符 号 数 s i g n e d − 有 符 号 数 s t r u c t − 结 构 体 u n i o n − 共 用 体 e n u m − 枚 举 v o i d − 无 类 型 \begin{cases} char-\bf{字符类型}\\short-\bf{短整型}\\int-\bf{整型}\\long-\bf{长整型}\\float-\bf{单精度浮点型}\\double-\bf{双精度浮点型}\\unsigned-\bf{无符号数}\\signed-\bf{有符号数}\\struct-\bf{结构体}\\union-\bf{共用体}\\enum-\bf{枚举}\\void-\bf{无类型}\\ \end{cases} charshortintlongfloatdoubleunsignedsignedstructunionenumvoid

补充:

  1. struct结构体:结构体中的成员拥有独立的空间:
struct data
{char a;short b;int c;
}
struct data
char
a
short
b
int
c
  1. union共用体:共用体中的成员共用一个空间:
union data
{char a;short b;int c;
}
struct data
a
b
c
  1. enum枚举和void无类型

    • enum枚举:将变量要赋值的值一一列举出来:

      C语言中没有bool,所以我们可以用enum语句将其表达出来

      enum BOOL{false,true};
      enum BOOL bool = false;
      
    • void无类型:记住不能用它定义变量,原因如下:

      { i n t n u m ; 当 编 译 器 编 译 到 这 句 话 时 , 能 确 定 n u m 占 4 B ; v o i d n u m ; 当 编 译 器 编 译 到 这 句 话 时 , 不 能 确 定 n u m 占 据 多 少 空 间 ; \begin{cases}int\ num;\bf{当编译器编译到这句话时,能确定num占4B;}\\void\ num;\bf{当编译器编译到这句话时,不能确定num占据多少空间;}\end{cases} {int num;num4Bvoid num;num

控制语句关键字(12个):
{ i f − 条 件 语 句 e l s e − 条 件 语 句 否 定 分 支 ( 与 i f 连 用 ) s w i t c h − 用 于 开 关 语 句 c a s e − 开 关 语 句 分 支 d e f a u l t − 开 关 语 句 中 的 其 他 分 支 f o r − 一 种 循 环 语 句 d o − 循 环 语 句 的 循 环 体 w h i l e − 循 环 语 句 的 循 环 条 件 b r e a k − 跳 出 当 前 循 环 c o n t i n u e − 结 束 当 前 循 环 , 开 始 下 一 轮 循 环 g o t o − 无 条 件 跳 转 语 句 r e t u r n − 子 程 序 返 回 语 句 ( 可 以 带 参 数 , 也 可 不 带 参 数 ) 循 环 条 件 \begin{cases} if-\bf{条件语句}\\else-\bf{条件语句否定分支(与 if 连用)}\\switch-\bf{用于开关语句}\\case-\bf{开关语句分支}\\default-\bf{开关语句中的其他分支}\\for-\bf{一种循环语句}\\do-\bf{循环语句的循环体}\\while-\bf{循环语句的循环条件}\\break-\bf{跳出当前循环}\\continue-\bf{结束当前循环,开始下一轮循环}\\goto-\bf{无条件跳转语句}\\return-\bf{子程序返回语句(可以带参数,也可不带参数)循环条件}\\ \end{cases} ifelseifswitchcasedefaultfordowhilebreakcontinuegotoreturn

存储类关键字(5个):
{ a u t o − 声 明 自 动 变 量 e x t e r n − 声 明 变 量 是 在 其 他 文 件 中 声 明 r e g i s t e r − 声 明 寄 存 器 变 量 s t a t i c − 声 明 静 态 变 量 c o n s t − 声 明 只 读 变 量 \begin{cases} auto-\bf{声明自动变量}\\extern-\bf{声明变量是在其他文件中声明}\\register-\bf{声明寄存器变量}\\static-\bf{声明静态变量}\\const-\bf{声明只读变量} \end{cases} autoexternregisterstaticconst

register(寄存器变量):

  1. 如果没显示标明 register ,就类似int num,如果num被高频繁使用系统也会放入寄存器中;

  2. register int num;//显示的将num放入寄存器中;

  3. 寄存器的变量不能取地址 &num;

    取地址用“%p”,示例如下:

    #include<stdio.h>
    int main(int argc, char *argv[])
    {int a = 16;printf("%p\n", a);
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其他关键字(3个):
{ s i z e o f − 计 算 数 据 类 型 长 度 t y p e d e f − 用 以 给 数 据 类 型 取 别 名 v o l a t i l e − 防 止 编 译 器 优 化 , 强 制 访 问 内 存 操 作 \begin{cases} sizeof-\bf{计算数据类型长度}\\typedef-\bf{用以给数据类型取别名}\\volatile-\bf{防止编译器优化,强制访问内存操作} \end{cases} sizeoftypedefvolatile访

typedef示例如下(我们将int转换成int64):

#include<stdio.h>
typedef int int64;
int64 main(int64 argc, char *argv[])
{int64 a = 16;printf("%p\n", a);
}

此时依然能够正常打印:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

volatile示例如下:

#include<stdio.h>
int main(int argc, char *argv[])
{int num = 10;volatile int value;printf("%d",num);return 0;
}

此时 int num = 10; 就一直保存在了内存里,即使高强度反复调用也不会存入寄存器。

2.2.数据类型

数 据 类 型 { 基 本 类 型 { 整 形 : i n t 、 s h o r t 、 l o n g 字 符 型 : c h a r 实 型 ( 浮 点 型 ) { 单 精 度 实 型 f l o a t 双 精 度 实 型 d o u b l e 构 造 类 型 { 数 组 类 型 结 构 类 型 : s t r u c t 联 合 类 型 : u n i o n 枚 举 类 型 : e n u m 指 针 类 型 ( c h a r ∗ 、 i n t ∗ 、 i n t ∗ ∗ 等 ) 数据类型\begin{cases} 基本类型\begin{cases} 整形:int、short、long\\ 字符型:char\\ 实型(浮点型)\begin{cases} 单精度实型float\\双精度实型double \end{cases} \end{cases}\\ 构造类型\begin{cases} 数组类型\\结构类型:struct\\联合类型:union\\枚举类型:enum \end{cases}\\ 指针类型(char*、int*、int**等) \end{cases} intshortlongchar(){floatdouble:struct:union:enum(charintint)

常量与变量

常量:在程序运行中,其值不能被改变的量;

  1. 整型:100125-1000
  2. 实型:3.140.125-3.232
  3. 字符:'a''b''2'
  4. 字符串:"a""ab""123"

示例如下:

int a = 100
char c = 'abc'
//因为一般出现在表达式右边,所以也称“右值”

变量:系统根据变量的类型开辟对应的空间,其值可以被修改;

示例如下:

int num = 10;
/*
注意:变量名num代表的是空间的内容
变量命名规则:由数字,字母和下划线组成但不能以数字开头;
*/

特点:变量在编译时为其分配相应的内存地址,可以通过名字和地址访问相应空间;

整型数据

  1. 整型常量:

    十进制;

    八进制;

    十六进制;

    以上三种都是整型的输出形式;

    #include<stdio.h>
    int test() {int num = 100;//十进制输出	%d %u %ld %luprintf("十进制:num = %d\n", num);//八进制输出	%oprintf("八进制:num = %o\n", num);//十六进制输出 %xprintf("十六进制:num = %x\n", num);
    }
    int main(int argc, char* argv[]) {test();return 0;
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    不同的进制仅仅是数据的表现形式,并不能修改数据本身;

    我们还可以对上面的代码进行修改,让输出结果看起来更直观:

    #include<stdio.h>
    int test() {int num = 100;//十进制输出	%d %u %ld %luprintf("十进制:num = %#d\n", num);//八进制输出	%oprintf("八进制:num = %#o\n", num);//十六进制输出 %xprintf("十六进制:num = %#x\n", num);
    }
    int main(int argc, char* argv[]) {test();return 0;
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  2. 整型变量:

    整型变量操作:读、写

    #include<stdio.h>
    int test() {//局部变量不初始化,内容随机//int num;int num = 0;printf("num = %d\n", num);//读操作,取值num = 100;//写操作,赋值printf("num = %d\n", num);//读操作,取值
    }
    int main(int argc, char* argv[]) {test();return 0;
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    如果我们想从键盘获取用户输入的话,我们可以在以上代码做改进:

    #include<stdio.h>
    int test() {//局部变量不初始化,内容随机//int num;int data = 0;int num = 0;printf("num = %d\n", num);//读操作,取值num = 100;//写操作,赋值printf("num = %d\n", num);//读操作,取值data = num;//num是读,data是写printf("data = %d\n", data);//获取键盘输入printf("请输入一个整型数据:");scanf_s("%d", &data);//&data 代表data对应空间的起始地址printf("data = %d", data);
    }
    int main(int argc, char* argv[]) {test();return 0;
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    有/无符号短整型(un/signed) short(int) ----2个字节

    有/无符号基本整型(un/signed) int-------------4个字节

    有/无符号长整型(un/signed) long(int)-------4个字节

    示例如下:

    #include<stdio.h>
    int test() {int num1 = 0;// %d 有符号整型输出printf("num1 = %d\n", num1);unsigned int num2 = 0;// %u 无符号整型输出printf("num2 = %u\n", num2);long num3 = 0;// %ld 有符号长整型输出printf("num3 = %ld\n", num3);unsigned long num4 = 0;// %lu 无符号长整型输出printf("num4 = %lu\n", num4);short num5 = 0;// %hd 有符号短整型输出printf("num5 = %hd\n", num5);unsigned short num6 = 0;// %hu 无符号短整型输出printf("num6 = %hu\n", num6);
    }
    int main(int argc, char* argv[]) {test();return 0;
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实型数据(浮点型)

实型常量:

实型常量也称为实数或者浮点数;

十进制形式:由数字和小数点组成:0.00.125.0

指数形式:123e3表示 123 × 1 0 3 123×10^3 123×103

不以 f 结尾的常量是 double 类型;

f 结尾的常量是 float 类型;

说明实例:

int fun() {//不以 f 结尾的实型常量为 double 类型printf("sizeof(3.14) = %d\n", sizeof(3.14));//以 f 结尾的实型常量为 float 类型printf("sizeof(3.14f) = %d\n", sizeof(3.14f));
}
int main(int argc, char* argv[]) {fun();return 0;
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以下面这个例子就有错误:

int fun() {//所以下面这个例子就有错误//float f = 3.14; //会报错double d = 3.14;// double 用%lfprintf("d = %lf\n", d);//或者float f = 3.14f;// float 用%fprintf("f = %f\n", f);
}
int main(int argc, char* argv[]) {fun();return 0;
}

我们将它们输出出来:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实型变量:

单精度(float)和双精度(double)

float型:占4B,7位有效数字,指数-37到38;

double型:占8B,16位有效数字,指数-307到308;

字符----''作用

  1. 字符常量:

    直接常量:用单引号括起来----'a' 'b'等;

    示例如下:

    int fuc() {// %c 输出的是字符printf("%c\n", 'a');//ch储存的是'a'的ASCII值,单引号表示的取字符的ASCII值char ch = 'a';printf("ch = %c\n", ch);// %d 输出的是ASCII值printf("ch = %d\n", ch);
    }
    int main(int argc, char* argv[]) {fuc();return 0;
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    'a'单引号表示取 a 的ASCII值,字符在计算机及存储的是ASCII

    如果我们要获取一个字符:

    int fuc() {char ch;printf("请输入一个字符:");//scanf里的 %c 只能提取一个字符//scanf_s("%c", &ch);//等同于:ch = getchar();printf("ch = %c\n", ch);printf("ch = %d\n", ch);
    }
    int main(int argc, char* argv[]) {fuc();return 0;
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    案例:输入字符'abc',只取其中的'a''b'

    int fuc() {char ch1, ch2;printf("请输入'abc':");ch1 = getchar();ch2 = getchar();printf("ch1 = %c\n", ch1);printf("ch2 = %c\n", ch2);
    }
    int main(int argc, char *argv[]) {fuc();return 0;
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    案例改编:输入字符'abc',只取其中的'a''c'

    int fuc() {char ch1, ch2;printf("请输入'abc':");ch1 = getchar();getchar();ch2 = getchar();printf("ch1 = %c\n", ch1);printf("ch2 = %c\n", ch2);
    }
    int main(int argc, char *argv[]) {fuc();return 0;
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    案例原理:

    getchar()函数能够依次在键入字符串中拿取字符,若没有被赋值项,则该字符被丢弃;

  2. 转义字符:

    • \n 换行字符;

    • \t 跳格,等于 tab;

    • \\ 反斜杠;

    • %% 百分号;

    • \0 将字符转义成数字

      示例如下:

      int fuc() {printf("%d\n",0);printf("%d\n", '\0');
      }
      int main(int argc, char *argv[]) {fuc();return 0;
      }
      

      打印效果如下:

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

字符串----""作用

案例:程序员的第一条代码;

int func() {// %s 就是输出字符串// %s 从字符串的首元素,逐个字符输出,遇到'\0',结束printf("%s", "hello world\n");// 所以系统会在字符串末尾自动添加一个结束字符 '\0'printf("\"hello world\"的内存大小是 %d\n", sizeof("hello world"));
}
int main(int argc, char *argv[]) {func();return 0;
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

问:为什么 hello world 占12个比特大小而不是11个比特大小呢?

答:因为字符串默认以 \0 结尾;

注意"" 双引号取的是字符串的首元素地址,而''单引号取的是字符串的首元素ASCII值;%s 从字符串的首元素,逐个字符输出,遇到'\0',结束;

示例如下:

int func() {//双引号取的是字符串的首元素地址printf("%d\n", "hello world");//%s 从字符串的首元素,逐个字符输出,遇到'\0',结束printf("%s\n", "hello wo\0rld");
}
int main(int argc, char *argv[]) {func();return 0;
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总结一下

格式化输出意义
%d十进制有符号整数
%u十进制无符号整数
%ld十进制有符号长整型
%lu十进制无符号长整型
%hd十进制有符号短整型
%hu十进制无符号短整型
%o八进制有符号整数
%x十六进制有符号整数
%f浮点数
%e指数形式的浮点数
%lfdouble型浮点数
%c单个字符
%s字符串
%p指针的值

特殊应用示例如下:

int func() {printf("###################\n");// %5d 表示占5个终端位宽 右对齐printf("##%5d##\n", 123);// %-5d 表示占5个终端位宽 左对齐printf("##%-5d##\n",123);// %05d 表示占5个终端位宽 右对齐 空位用0补齐printf("##%05d##\n", 123);//千万不能写 %-05d//printf("##%-05d##",123);没办法输出出来// %5.2f 5表示总位宽为5,2表示小数点保留俩位printf("##%5.2f##\n", 3.1);
}
int main(int argc, char *argv[]) {func();return 0;
}

打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

格式化意义
%5d表示占5个终端位宽 右对齐
%05d表示占5个终端位宽 右对齐 空位用0补齐
%-5d表示占5个终端位宽 左对齐
%5.2f5表示总位宽为5,2表示小数点保留俩位

typedef 类型重定义:为已有的类型重新取个别名步骤

  1. 用已有的类型定义一个变量;
  2. 用别名替换变量名;
  3. 在整个表达式的前方加上 typedef;

案例一:给 int 取别名 INT32

typedef int INT32;

案例二:给一个数组 arr[5] 取一个别名

  • step1:

    int arr[5];
    
  • step2:

    int ARR[5];
    
  • step3:

    typedef int ARR[5];
    
  • 最终如下:

    typedef int ARR[5];
    ARR arr;//arr就是一个拥有5个int元素的数组
    

数据的混合运算

数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题;

转换的方法有两种: { 自 动 转 换 : 遵 循 一 定 的 规 则 , 由 编 译 系 统 自 动 完 成 ; 强 制 类 型 转 换 : 把 表 达 式 的 运 算 结 果 强 制 转 换 成 所 需 的 数 据 类 型 ; \begin{cases}\bf{自动转换:遵循一定的规则,由编译系统自动完成;}\\\bf{强制类型转换:把表达式的运算结果强制转换成所需的数据类型;}\end{cases} {

  • 自动类型转换(图示):

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    案例:有符号和无符号的转换;

    int way() {int data1 = -20;unsigned int data2 = 10;//有符号和无符号计算时,先将有符号转换成无符号//则这里会将 -20 转换成无符号(-20的补码,很大的数)if (data1 + data2 > 0) {printf(">0\n");}else if(data1 + data2 < 0) {printf("<0\n");}
    }
    int main(int argc, char *argv[]) {way();return 0;
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    案例:intdouble 的转换;

    int way() {int data = 10;// 3.14 是 double 类型,data 是 int 类型//应该先把 int 转换成 doubleprintf("%d\n", sizeof(data + 3.14));
    }
    int main(int argc, char *argv[]) {way();return 0;
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    案例:shortchar 的类型转换;

    int way() {char ch = 'a';short data = 20;//由于 char short 自身字节数过小,很容易溢出//所以只要它们参加运算,都会被系统转换为 int 类型printf("%d\n", sizeof(ch + ch));printf("%d\n", sizeof(ch + data));printf("%d\n", sizeof(data + data));
    }
    int main(int argc, char *argv[]) {way();return 0;
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    案例:doublefloat 的类型转换;

    int way() {// 3.14 是 double 类型// 3.14f 是 float 类型printf("%d\n", sizeof(3.14 + 3.14f));
    }
    int main(int argc, char *argv[]) {way();return 0;
    }
    

    打印效果如下:

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 强制转换:通过类型转换运算来实现;

    公式如下:
    ( 类 型 说 明 符 ) 表 达 式 (类型说明符) 表达式 ()
    注意:

    类型说明符要用小括号给括起来;

    功能:

    把表达式的运算结果强制转换成类型说明符所表示的类型;

    例如下:

    int way() {float x = 3.14f;int j;//强制类型转换只是在当前语句起作用,并没有改变 x 是 float 的实时;j = (int)x;    printf("%d\n", j);
    }
    int main(int argc, char *argv[]) {way();return 0;
    }
    

    打印效果如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 无论是强制类型转换还是自动转换,都只是为了本次运算的需要,而对变量的数据长度进行的临时性转换,而不改变数据定义的类型;

  • 为什么printf()用%f输出double型,而scanf却用%lf呢?

    答:printf的%f说明符的确既可以输出float型又可以输出double型。 根据"默认参数提升"规则(在printf这样的函数的可变参数列表中 ,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。参见问题15.2。

    对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样,因此,scanf区别%f和%lf。

    下表列出了printf和scanf对于各种格式说明符可以接受的参数类型。

下一章:由浅到深认识C语言(3):C语言的类型及语句

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pr画中画模板视频素材

pr画中画视频模板&#xff0c;视频聊天对话模板。软件支持&#xff1a;Premiere Pro 2021或更高版本。 来自&#xff1a;pr模板网&#xff0c;下载地址&#xff1a;https://prmuban.com/38196.html

代码随想录算法训练营第day26|39. 组合总和、 40.组合总和II、 131.分割回文串

39. 组合总和 力扣题目链接(opens new window) 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明&#xff1a; 所有数字&#xff08;包括 ta…

execl数据多维度建模(二)

源数据 1.选择数据 1&#xff09;插入透视表 选中源数据的数据区域--插入--数据透视表&#xff08;新的工作表名&#xff1a;透视表&#xff09; 2&#xff09;透视表设置 ShipCountry拉入行标签&#xff1b;CategoryName拉入列标签&#xff1b;sales拉入值的位置 3&#xf…

计算机二级Python题目12

目录 1. 基础题 1.1 基础题1 1.2 基础题2 1.3 基础题3 2. turtle画图题 3. 大题 3.1 大题1 3.2 大题2 1. 基础题 1.1 基础题1 sinput("请输入一个小数&#xff1a;") ss[::-1] cs0 for c in s:if c.:breakcseval(c) print({:*>10}.format(cs)) 1.2 基础…

CPU生产的生命周期 - 原材料篇

CPU是中央处理器的缩写&#xff0c;它是执行程序指令的电子电路。CPU使用的基本原材料是硅、铜、铝和各种塑料。由于CPU在现代社会中被大量消耗&#xff0c;因此生产商必须考虑原材料的能源投入和环境影响。 硅是地壳中第二丰富的元素。它以二氧化硅和硅酸盐的形式存在。二氧化…

Linux——进程通信(二) 匿名管道的应用:进程池

前言 之前我们学习了进程通过匿名管道进行通信&#xff0c;实现了两个进程的数据传输。 如果我们管理的是很多个进程&#xff0c;通过管道发送指令&#xff0c;因为如果管道中没有数据&#xff0c;读端必须等待&#xff0c;也就是被管理的进程们都在等待我发送的指令&#xf…

CVE-2024-24112 XMall后台管理系统 SQL 注入漏洞分析

------作者本科毕业设计项目 基于 Spring Boot Vue 开发而成...... [Affected Component] /item/list /item/listSearch /sys/log /order/list /member/list (need time-based blind injection) /member/list/remove 项目下载地址 Exrick/xmall: 基于SOA架构的分布式…

cesium viewer camera flyto

一、viewer的flyTo内部调用的是camera的相关定位方法&#xff0c;针对不同的定位对象&#xff0c;计算出合适的位置和相机视角。viewer可以定位到entity、dataSource、Cesium3DTileset、ImageLayer等。 var rect [116.490401, 39.964771, 116.499623, 39.977102];var heading …

2024全国水科技大会:【协办单位】山东文远环保科技股份有限公司

山东文远环保科技股份有限公司坐落于千年古城齐国故都--临淄。初始成立于2011年&#xff0c;是淄博市首批国有资本参股的混合改制企业。 公司着力打造环保设备制造、环保工程及服务、环保水务/固废处理/新能源项目投资及运营管理、固废循环经济产业园等四大板块。是一家集投资、…

Elasticsearch8.x版本Java客户端Elasticsearch Java API 如何并发修改

前言 并发控制&#xff0c;一般有两种方案&#xff0c;悲观锁和乐观锁&#xff0c;其中悲观锁是默认每次更新操作肯定会冲突&#xff0c;所以每次操作都要先获取锁&#xff0c;操作完毕再释放锁&#xff0c;适用于写比较多的场景。而乐观锁是默认每次更新操作都不会冲突&#…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:GridCol)

栅格子组件&#xff0c;必须作为栅格容器组件(GridRow)的子组件使用。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 子组件 可以包含单个子组件。 接口 GridCol(option?:{span?: number | …

综合知识篇00-综合知识考点汇总目录(2024年软考高级系统架构设计师冲刺知识点总结-综合知识篇-先导篇)

专栏系列文章推荐&#xff1a; 2024高级系统架构设计师备考资料&#xff08;高频考点&真题&经验&#xff09;https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】&#xff08;2024年软考高级…

二叉树的初步学习和顺序结构实现

当我们学完顺序表、链表、栈和队列的时候&#xff0c;我们就要开始学习树了。树对于以后的学习有非常大的帮助&#xff0c;尤其是排序。好了&#xff0c;开始我们的学习吧。 1.树的概念及结构 1.1树的结构 树结构是一种非线性结构。它是由n&#xff08;n>0&#xff09;个…

CHINC邀请函 | 全视通邀您共赴青岛,碰撞数智火花

展会名称&#xff1a;2024中华医院信息网络大会&#xff08;CHINC&#xff09; 展会时间&#xff1a;3月29-31日 展会地址&#xff1a;青岛国际会展中心&#xff08;红岛馆&#xff09; 全视通展位&#xff1a;B2-A05A 全视通将携智慧病区、智慧门诊、智慧手术室、智慧后勤…

快速实现鸿蒙侧边栏显示与隐藏

文章目录 前言侧边栏组件使用快速搞定侧边栏总结 一、前言 有好多文章要分享&#xff0c;但是来不及&#xff0c;就把最近觉得比较重要的组件分享下。最近因为在完善玩android的一个app&#xff0c;我的这个app叫玩鸿蒙&#xff0c;过段时间就开源了&#xff0c;敬请期待。 …

免费开源的 Vue 拖拽组件 VueDraggablePlus (兼容移动端)

VueDraggablePlus 支持 Vue2 / Vue3&#xff0c;是被尤雨溪推荐了的拖拽组件。我自己试用过了&#xff0c;还挺好用的&#xff0c;兼容移动端。 官网&#xff1a;https://alfred-skyblue.github.io/vue-draggable-plus/ 官网文档里面很详细了&#xff0c;我就不再介绍安装和用…

Google colab中如何从kaggle中接入数据?

写在前面 使用google colab进行数据分析和探索时&#xff0c;可引用的数据源包括但不限于&#xff1a;1.可上传的数据文件用本地加载的的方式打开数据资源&#xff1b;2.从网络链接中直接打开后加载到缓存中的文件资源&#xff1b;3.通过API或者外部的开放接口加载数据&#x…

【日本語】N2考试湖北报名笔记

阅读资料 视频&#xff1a;JLPT报名技巧 使用浏览器调试模式快速报名&#xff1b; 1 报名流程 【考场选择】 1.1 春季报名&#xff1a;03-19 07:00:00 1.2 预习网站登录信息 1.3 登录验证码&#xff1a;06:55 &#xff08;图片来自视频《教日语的阿飞老师 - 担心能力考抢…

微信小程序选择器picker的使用(省市区)

index.wxml picker中的 moderegion模式&#xff0c;这里同element中的select不同的是&#xff0c;不需要自己在绑定数据原&#xff0c;默认就包含了省市区的整体数据 <view class"section"><view class"section__title">省市区选择器</vie…

【源码阅读】Mybatis底层源码分析(详细Debug查看附代码)

一、搭建测试代码框架 &#xff08;代码已提交到github->测试代码&#xff0c;建议结合代码根据本文debug一遍更有利于理解&#xff0c;帮忙点个Star 哈&#xff0c;本人在这里谢谢了&#xff09; 二、猜想Mybatis是如何设计的 从上面的案例中&#xff0c;可以大致可以猜测…