解码C语言基础
main函数-程序的入口
主函数有且只有一个
main无参形式
/*
函数名:main
函数参数:无
函数返回值:
返回0:表示函数正常退出
返回非0:表示函数异常退出
*/
int main(void)
{
/* code */
return 0;
}
main有参形式
/*
函数名:main
函数参数:
argc:参数个数
argv:参数数组,每个参数是一个字符串
函数返回值:
返回0:表示函数正常退出
返回非0:表示函数异常退出
*/
int main(int argc, char const *argv[])
{
/* code */
return 0;
}
man帮助手册(九册)
提供命令、函数、系统调用、配置文件等的权威说明
1.Shell命令(默认已安装)
2.系统调用(函数手册 - 这些函数由系统内核直接提供)
3.库函数(函数手册 - 这些函数有标准库提供)
4.特殊文件(通常出现在/dev目录下)
5.文件的特殊格式或协定(例如/etc/passwd的格式)
6.游戏
7.杂项(例如一些宏定义)
8.系统管理员命令(通常只能由管理员执行)
9.非标准内核例程
系统只安装第一册,以下帮助信息一般需要用户自己手动安装
sudo apt-get install manpages
sudo apt-get install manpages-dev
sudo apt-get install manpages-posix
sudo apt-get install manpages-posix-dev
使用技巧
//查看指定命令/函数的手册(自动匹配优先章节)
man [名称] # 例:man cp、man malloc
//查看指定章节的内容
man [章节号] [名称] # 例:man 3 malloc、man 5 sshd_config
//搜索包含关键词的所有手册(-k 表示“keyword”)
man -k [关键词] # 例:man -k "file copy"(搜索与“文件复制”相关的命令)
printf-标准输出
printf原型
/*
函数名:printf
函数参数:
format:格式化字符串
...:可变参数列表,对应格式说明符的具体值
函数返回值:
int 类型,成功时返回打印的字符总数
失败时返回负数
*/
int printf(const char *format, ...);
scanf
scanf原型
/*
函数名:scanf
函数参数:
format:格式化字符串
...:可变参数列表,指向用于存储输入数据的变量地址
函数返回值:
int 类型,成功时返回成功读取并赋值的变量个数
失败时返回EOF(通常为-1),遇到文件结束或错误时返回
*/
int scanf(const char *format, ...);
格式控制符
| 类型符 | 含义 | 示例 | 输出结果 |
|---|---|---|---|
%d |
十进制整数(int) |
printf("%d", 123); |
123 |
%u |
无符号十进制整数(unsigned) |
printf("%u", 123U); |
123 |
%x |
十六进制整数(小写) | printf("%x", 255); |
ff |
%X |
十六进制整数(大写) | printf("%X", 255); |
FF |
%o |
八进制整数 | printf("%o", 8); |
10 |
%f |
浮点数(float/double) |
printf("%f", 3.14); |
3.140000 |
%c |
单个字符(char) |
printf("%c", 'A'); |
A |
%s |
字符串(char*) |
printf("%s", "hello"); |
hello |
%p |
指针地址 | printf("%p", &a); |
0x7ffd8a5b9a3c |
%% |
输出 % 本身 |
printf("%%"); |
% |
附加格式修饰符
| 修饰符格式 | 含义说明 | 示例代码 | 输出结果(注:用“□”标记空格,便于查看对齐效果) |
|---|---|---|---|
%md |
输出宽度为 m(m 为正整数),不足宽度用空格填充,内容右对齐 |
printf("%5d", 10); |
□□□10(共5位,前补3个空格) |
%-md |
输出宽度为 m(m 为正整数),不足宽度用空格填充,内容左对齐 |
printf("%-5d", 10); |
10□□□(共5位,后补3个空格) |
%0md |
输出宽度为 m(m 为正整数),不足宽度用 0 填充(仅对数值有效) |
printf("%05d", 10); |
00010(共5位,前补3个0) |
%m.nf |
输出总宽度为 m,同时保留 n 位小数,不足总宽度用空格填充 |
printf("%8.2f", 3.14159); |
□□□3.14(总8位,小数点后2位,前补3个空格) |
%.nf |
不限制输出宽度,仅指定保留 n 位小数(宽度随内容自适应) |
printf("%.3f", 3.14); |
3.140(仅保留3位小数,无空格填充) |
%*.*f |
输出宽度和小数位数由参数动态指定(第一个 * 对应宽度,第二个 * 对应小数位) |
printf("%*.*f", 8, 2, 3.14); |
□□□3.14(效果同 %8.2f,参数依次传入宽度、小数位、数值) |
基本数据类型
- 整型
| 类型声明 | 符号属性 | 占用内存(字节) | 取值范围(以对应系统位数为准) | 适用场景 |
|---|---|---|---|---|
char |
有符号 | 1 | -128 ~ 127 |
存储单个字符(ASCII 码) |
unsigned char |
无符号 | 1 | 0 ~ 255 |
存储无负数值(如颜色值、字节) |
short |
有符号 | 2 | -32768 ~ 32767 |
存储较小范围的整数 |
unsigned short |
无符号 | 2 | 0 ~ 65535 |
存储无负的小整数 |
int |
有符号 | 4 | -2147483648 ~ 2147483647 |
默认整数类型(最常用) |
unsigned int |
无符号 | 4 | 0 ~ 4294967295 |
存储非负整数(如计数、ID) |
long |
有符号 | 4(32 位系统)/ 8(64 位系统) | -2147483648 ~ 2147483647(32 位系统) |
存储较大范围的整数 |
unsigned long |
无符号 | 4(32 位系统)/ 8(64 位系统) | 0 ~ 4294967295(32 位系统) |
存储无负的大整数 |
long long |
有符号 | 8 | -9223372036854775808 ~ 9223372036854775807 |
存储极大范围的整数(C99 标准新增) |
unsigned long long |
无符号 | 8 | 0 ~ 18446744073709551615 |
存储无负的极大整数 |
- 浮点型
| 类型声明 | 占用内存(字节) | 有效数字位数 | 取值范围(近似) | 适用场景 |
|---|---|---|---|---|
float |
4 | 6~7 位 | ±3.4×10^-38 ~ ±3.4×10^38 |
单精度浮点数(内存占用小,精度要求低) |
double |
8 | 15~17 位 | ±1.7×10^-308 ~ ±1.7×10^308 |
双精度浮点数(默认浮点类型,精度要求高) |
long double |
8/12/16(因编译器/平台而异) | 18~19 位 | ±3.4×10^-4932 ~ ±1.1×10^4932 |
高精度浮点数(极少用,如科学计算) |
- 布尔类型(头文件<stdbool.h>)
| 类型声明 | 占用内存(字节) | 取值范围 | 说明 |
|---|---|---|---|
bool |
1(通常) | true / false |
true 等价于整数 1,false 等价于整数 0 |
- 常量与变量
- 变量是程序运行中值可以动态变化的内存单元,需声明数据类型,用于存储临时结果、用户输入等可变数据。
- 常量是值一旦定义就不可修改的标识符,分为字面常量(直接写在代码中的值)和符号常量(用#define或const定义的有名字的常量),用于表示固定不变的数据(如 π 值、配置参数等)。
| 特性 | 变量(Variable) | 常量(Constant) |
|---|---|---|
| 定义方式 | 数据类型 + 变量名(可初始化) 例: int num = 10; |
1. 宏常量:#define 常量名 值例: #define MAX 1002. 常变量: const 类型 常量名 = 值例: const float PI = 3.14f |
| 值的可修改性 | 运行中可通过赋值语句修改 例: num = 20; |
定义后不可修改,强行修改会编译报错 |
| 数据类型 | 必须显式声明类型(如 int、float) |
宏常量无类型;常变量需显式声明类型 |
| 内存分配 | 定义时分配内存,存储在可读写区域 | 宏常量不分配内存(预处理阶段直接文本替换); 常变量分配内存(可能在只读区域) |
| 作用域 | 局部变量:函数/代码块内有效 全局变量:整个程序有效 |
宏常量无作用域(预处理全局替换); 常变量作用域与变量一致(局部/全局) |
| 生命周期 | 局部变量:函数/代码块执行期间存在 全局变量:程序运行期间一直存在 |
宏常量无生命周期(预处理阶段生效); 常变量生命周期与变量一致 |
| 初始化要求 | 局部变量可先声明后赋值(未初始化时为随机值) 全局变量未初始化时默认值为 0 |
必须在定义时初始化(否则无意义) |
| 典型用途 | 存储临时数据、用户输入、状态变化等(如计数器、中间结果) |
作用域
| 作用域类型 | 定义位置 / 方式 | 有效范围(可见区域) | 生命周期(存在时间) | 核心特性 | 典型使用场景 |
|---|---|---|---|---|---|
| 局部变量 | 函数内部、{} 包裹的代码块(如 if/for 块) |
仅在定义它的函数或代码块内,出界后不可访问 | 函数 / 代码块执行时创建,执行结束后销毁(栈内存) | 1. 不同函数 / 块中可同名,互不干扰;2. 未初始化时值为随机值;3. 内存自动回收 | 函数内临时存储数据(如计算中间值、循环计数器) |
| 函数参数(形参) | 函数定义的参数列表中(如 void func(int x)) |
仅在当前函数内部有效,等同于函数的 “局部变量” | 函数被调用时初始化,函数执行结束后销毁(栈内存) | 1. 由调用者传入的实参赋值;2. 作用域与函数内局部变量一致;3. 本质是函数的 “输入接口” | 函数间传递数据(如向 add(a,b) 传递两个待加数值) |
| 全局变量 | 所有函数外部(通常在源文件开头) | 从定义位置开始,到整个源文件结束,所有函数可访问 | 程序启动时创建,程序退出时销毁(静态内存) | 1. 未初始化时默认值为 0;2. 可通过 extern 关键字跨文件访问;3. 全程序共享 |
多个函数需共享的数据(如配置参数、全局状态标记,需谨慎使用以避免耦合) |
| 块作用域变量 | 内层代码块(如 { int b = 2; }) |
仅在定义它的内层代码块内,出块后不可访问 | 代码块执行时创建,执行结束后销毁(栈内存) | 1. 会屏蔽外层同名变量(局部 / 全局);2. 进一步缩小变量作用范围,减少命名冲突 | 限制变量作用域(如 for 循环内的计数器 i,仅在循环块内使用,避免污染外部) |
注. 同名变量屏蔽规则:当不同作用域的变量同名时,内层作用域变量会屏蔽外层变量(优先级:块作用域 > 函数参数 > 局部变量 > 全局变量)。例如,函数内的局部变量会覆盖同名全局变量,内层代码块的变量会覆盖外层函数的同名变量。
类型转换
类型转换是将一种数据类型的值转换为另一种数据类型的过程,主要用于不同类型数据之间的运算或赋值。
- 隐式类型转换
隐式类型转换由编译器自动完成,无需程序员干预,遵循 "低精度向高精度转换" 的原则(避免数据丢失)
- 隐式类型转换
- 算术运算中的转换
不同类型数据参与运算时,自动转换为其中精度最高的类型
转换优先级(从低到高):char → short → int → unsigned int → long → unsigned long → long long → float → double → long double
- 算术运算中的转换
- 赋值运算中的转换
右值自动转换为左值的类型
若右值精度高于左值,可能导致数据截断或精度损失
- 赋值运算中的转换
- 函数调用中的转换
实参自动转换为形参的类型
- 函数调用中的转换
eg
#include <stdio.h>
int main() {
char c = 'A'; // 'A'的ASCII码为65
int i = 100;
float f = 3.14f;
double d = 2.718;
// 1. 算术运算转换
int result1 = c + i; // c自动转换为int(65 + 100 = 165)
double result2 = i + f; // i和f自动转换为double(100.0 + 3.14 = 103.14)
// 2. 赋值转换
int result3 = f; // f(3.14)转换为int(3),精度损失
float result4 = d; // d(2.718)转换为float(2.718f),可能损失精度
printf("c + i = %d\n", result1); // 输出:165
printf("i + f = %lf\n", result2); // 输出:103.140000
printf("f -> int = %d\n", result3); // 输出:3
printf("d -> float = %f\n", result4); // 输出:2.718000
return 0;
}
- 显示类型转换
显式类型转换由程序员手动指定,使用强制转换运算符实现,语法为:(目标类型) 表达式
- 显示类型转换
eg
#include <stdio.h>
int main() {
float f = 3.14159f;
int i = 100;
double d = 2.71828;
// 强制转换示例
int num1 = (int)f; // 将float转换为int(3.14159 → 3)
float num2 = (float)d; // 将double转换为float(可能损失精度)
char ch = (char)i; // 将int转换为char(100 → 'd',ASCII码)
// 运算中的强制转换
float average = (float)10 / 3; // 10先转换为float,结果为3.333...
int area = (int)(3.14 * 5 * 5); // 先计算再转换,结果为78
printf("(int)3.14159 = %d\n", num1); // 输出:3
printf("(float)2.71828 = %f\n", num2); // 输出:2.718280
printf("(char)100 = %c\n", ch); // 输出:d
printf("(float)10/3 = %f\n", average); // 输出:3.333333
printf("(int)(3.14*5*5) = %d\n", area); // 输出:78
return 0;
}
源码补码反码
| 编码方式 | 定义说明 | 正数表示规则 | 负数表示规则 | 示例(以 -3 为例,8 位) |
|---|---|---|---|---|
| 源码 | 直接用符号位和数值位表示的二进制形式,符号位(最高位)0 表示正,1 表示负 | 符号位为 0,数值位为二进制绝对值 | 符号位为 1,数值位为二进制绝对值 | 10000011 |
| 反码 | 正数与源码相同,负数是对源码的数值位按位取反(符号位不变)得到的编码形式 | 与源码相同(符号位 0,数值位不变) | 符号位为 1,数值位按位取反(0→1,1→0) | 11111100 |
| 补码 | 正数与源码相同,负数是对反码加 1(若有进位则丢弃)得到的编码形式,是计算机实际存储整数的方式 | 与源码相同(符号位 0,数值位不变) | 反码 + 1(若反码加 1 后有进位,直接丢弃) | 11111101 |
附- ASCII码
| 十进制 | 二进制 | 字符 | 说明(控制字符)/ 字符(可打印字符) | 十进制 | 二进制 | 字符 | 说明(控制字符)/ 字符(可打印字符) |
|---|---|---|---|---|---|---|---|
| 0 | 00000000 | NUL | 空字符 | 64 | 01100000 | @ | 艾特符号 |
| 1 | 00000001 | SOH | 标题开始 | 65 | 01100001 | A | 大写字母A |
| 2 | 00000010 | STX | 文本开始 | 66 | 01100010 | B | 大写字母B |
| 3 | 00000011 | ETX | 文本结束 | 67 | 01100011 | C | 大写字母C |
| 4 | 00000100 | EOT | 传输结束 | 68 | 01100100 | D | 大写字母D |
| 5 | 00000101 | ENQ | 询问字符 | 69 | 01100101 | E | 大写字母E |
| 6 | 00000110 | ACK | 确认字符 | 70 | 01100110 | F | 大写字母F |
| 7 | 00000111 | BEL | 响铃(告警) | 71 | 01100111 | G | 大写字母G |
| 8 | 00001000 | BS | 退格(Backspace) | 72 | 01101000 | H | 大写字母H |
| 9 | 00001001 | HT | 水平制表符(\t) | 73 | 01101001 | I | 大写字母I |
| 10 | 00001010 | LF | 换行(\n) | 74 | 01101010 | J | 大写字母J |
| 11 | 00001011 | VT | 垂直制表符 | 75 | 01101011 | K | 大写字母K |
| 12 | 00001100 | FF | 换页 | 76 | 01101100 | L | 大写字母L |
| 13 | 00001101 | CR | 回车(\r) | 77 | 01101101 | M | 大写字母M |
| 14 | 00001110 | SO | 移位输出 | 78 | 01101110 | N | 大写字母N |
| 15 | 00001111 | SI | 移位输入 | 79 | 01101111 | O | 大写字母O |
| 16 | 00010000 | DLE | 数据链路转义 | 80 | 01110000 | P | 大写字母P |
| 17 | 00010001 | DC1 | 设备控制1 | 81 | 01110001 | Q | 大写字母Q |
| 18 | 00010010 | DC2 | 设备控制2 | 82 | 01110010 | R | 大写字母R |
| 19 | 00010011 | DC3 | 设备控制3 | 83 | 01110011 | S | 大写字母S |
| 20 | 00010100 | DC4 | 设备控制4 | 84 | 01110100 | T | 大写字母T |
| 21 | 00010101 | NAK | 否定应答 | 85 | 01110101 | U | 大写字母U |
| 22 | 00010110 | SYN | 同步空闲 | 86 | 01110110 | V | 大写字母V |
| 23 | 00010111 | ETB | 传输块结束 | 87 | 01110111 | W | 大写字母W |
| 24 | 00011000 | CAN | 取消 | 88 | 01111000 | X | 大写字母X |
| 25 | 00011001 | EM | 媒体结束 | 89 | 01111001 | Y | 大写字母Y |
| 26 | 00011010 | SUB | 替换 | 90 | 01111010 | Z | 大写字母Z |
| 27 | 00011011 | ESC | 转义(Escape) | 91 | 01111011 | [ | 左方括号 |
| 28 | 00011100 | FS | 文件分隔符 | 92 | 01111100 | \ | 反斜杠 |
| 29 | 00011101 | GS | 组分隔符 | 93 | 01111101 | ] | 右方括号 |
| 30 | 00011110 | RS | 记录分隔符 | 94 | 01111110 | ^ | 插入符号 |
| 31 | 00011111 | US | 单元分隔符 | 95 | 01111111 | _ | 下划线 |
| 32 | 01000000 | (空格) | 空格 | 96 | 10000000 | ` | 反引号 |
| 33 | 01000001 | ! | 感叹号 | 97 | 10000001 | a | 小写字母a |
| 34 | 01000010 | " | 双引号 | 98 | 10000010 | b | 小写字母b |
| 35 | 01000011 | # | 井号 | 99 | 10000011 | c | 小写字母c |
| 36 | 01000100 | $ | 美元符号 | 100 | 10000100 | d | 小写字母d |
| 37 | 01000101 | % | 百分号 | 101 | 10000101 | e | 小写字母e |
| 38 | 01000110 | & | 和号 | 102 | 10000110 | f | 小写字母f |
| 39 | 01000111 | ' | 单引号 | 103 | 10000111 | g | 小写字母g |
| 40 | 01001000 | ( | 左括号 | 104 | 10001000 | h | 小写字母h |
| 41 | 01001001 | ) | 右括号 | 105 | 10001001 | i | 小写字母i |
| 42 | 01001010 | * | 星号 | 106 | 10001010 | j | 小写字母j |
| 43 | 01001011 | + | 加号 | 107 | 10001011 | k | 小写字母k |
| 44 | 01001100 | , | 逗号 | 108 | 10001100 | l | 小写字母l |
| 45 | 01001101 | - | 减号/连字符 | 109 | 10001101 | m | 小写字母m |
| 46 | 01001110 | . | 句号 | 110 | 10001110 | n | 小写字母n |
| 47 | 01001111 | / | 斜杠 | 111 | 10001111 | o | 小写字母o |
| 48 | 01010000 | 0 | 数字0 | 112 | 10010000 | p | 小写字母p |
| 49 | 01010001 | 1 | 数字1 | 113 | 10010001 | q | 小写字母q |
| 50 | 01010010 | 2 | 数字2 | 114 | 10010010 | r | 小写字母r |
| 51 | 01010011 | 3 | 数字3 | 115 | 10010011 | s | 小写字母s |
| 52 | 01010100 | 4 | 数字4 | 116 | 10010100 | t | 小写字母t |
| 53 | 01010101 | 5 | 数字5 | 117 | 10010101 | u | 小写字母u |
| 54 | 01010110 | 6 | 数字6 | 118 | 10010110 | v | 小写字母v |
| 55 | 01010111 | 7 | 数字7 | 119 | 10010111 | w | 小写字母w |
| 56 | 01011000 | 8 | 数字8 | 120 | 10011000 | x | 小写字母x |
| 57 | 01011001 | 9 | 数字9 | 121 | 10011001 | y | 小写字母y |
| 58 | 01011010 | : | 冒号 | 122 | 10011010 | z | 小写字母z |
| 59 | 01011011 | ; | 分号 | 123 | 10011011 | { | 左花括号 |
| 60 | 01011100 | < | 小于号 | 124 | 10011100 | | | 竖线 |
| 61 | 01011101 | = | 等号 | 125 | 10011101 | } | 右花括号 |
| 62 | 01011110 | > | 大于号 | 126 | 10011110 | ~ | 波浪号 |
| 63 | 01011111 | ? | 问号 | 127 | 01111111 | DEL | 删除(Delete) |
解码C语言基础的更多相关文章
- JavaScript 语言基础
js语言基础 一 基本知识 UniCode编码 区分大小写(HTML不区分/XHTML区分) Unicode转义序列 \uxxxx (\u加4位16进制表示) 注释 单行注释:// 多行注释:/* * ...
- js-day01-js语言基础
JavaScript简介:JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本 ...
- 20165327 学习基础和C语言基础调查
学习基础和C语言基础调查 一.关于技能 1. 你有什么技能比大多人(超过90%以上)更好? 根据数据来看,应该是短跑(几次测速50米平均时间6.5s),上学期的体测中短跑这项成绩在班上排前面,我们这个 ...
- GO学习-(19) Go语言基础之网络编程
Go语言基础之网络编程 现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程. 关于网络编程其 ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...
- C#语言基础
第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了 ...
- C语言基础回顾
第一章 C语言基础 1. C语言编译过程 预处理:宏替换.条件编译.头文件包含.特殊符号 编译.优化:翻译并优化成等价的中间代码表示或汇编代码 汇编:生成目标文件,及与源程序等效的目标的机器语言代码 ...
- 黑马程序员_ C语言基础(二)
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 概览 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): 1.Hello W ...
- C#语言基础— 输入与输出
C#语言基础— 输入与输出 1.1函数的四要素:名称.输入.输出.加工 1.2主函数:输出语句.输入语句: Static viod Main(string[] stgs)//下划线部分可以自己指定 { ...
随机推荐
- 保姆级vmware安装MacOS
为啥是v10.15 MacOS10.15对硬件的要求很低,一般是不会卡的 准备工作 开始之前,请先完成以下步骤: 你的计算机中装有VMware Workstation 15及以上版本, 并确定你的磁盘 ...
- TypeScript枚举类型应用:前后端状态码映射的最简方案
介绍 这篇文章来谈一下 TypeScript 中的枚举类型(Enum)以及一些最佳实践.事情的起因是这样的,今天看到自己之前写的一段代码,感觉不是很好,于是想优化一下,期间用到了枚举类型,遂记录一下. ...
- 前端开发系列122-进阶篇之Floating point addition
本文简单说明 JavaScript 中常见的进制转换函数以及浮点数计算的注意点. 如何把任意进制的数据转换为十进制? 假设我们有二进制数据110,如果要把该数据转换为十进制数据可以参考下面的处理过程. ...
- leetcode 53 最大自序列和
简介 暴力只要变量两遍, 挺好的, 不过更好的应该是动态规划. 应该是最简单的动态规划了吧 code class Solution { public: int maxSubArray(vector&l ...
- 利用gitblit创建本地Git仓库
最近有个子项目,还未正式在服务器上进行开发环境设置,提出先本地设置Git仓库,于是开始搞这个: 首先是去gitblit官网进行软件工具下载 软件下载好解压后,运行gitblit.cmd 出现8843端 ...
- Web前端入门第 79 问:JavaScript async & await 的异步任务进化之路
JS 中异步任务随处可见,比如: 1.用户交互的点击.输入 2.网络请求的 fetch.ajax.WebSocket 3.资源中的图片.脚本加载 4.定时任务 setTimeout.setInterv ...
- 使用rclone将linux服务器上的文件夹同步到nextcloud
最近公司在用nextcloud管理文件,我写了一个python脚本,领导想看中间生成的图片,让我把图片同步到nextcloud上.上网搜了一些方法,最终用rclone实现,以下是实现过程. 服务器版本 ...
- 如何通过ETLCloud做企业级数据集成
在数字化转型的浪潮中,数据已成为企业最宝贵的资产之一.企业级数据整合不仅能够提高数据的可用性和一致性,还能为企业决策提供强有力的支持. 一.什么是数据集成 数据集成是指将多个数据源中的数据进行整合.清 ...
- webstorm激活码2
A0W7XBZNUZ-eyJsaWNlbnNlSWQiOiJBMFc3WEJaTlVaIiwibGljZW5zZWVOYW1lIjoi5rC45LmF5r+A5rS7IGlkZWEubWVkZW1pb ...
- GROOVY 列表
列表的基本操作: import java.io.File class Example { static void main(String[] args){ def list1 = [1,2]; def ...