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

C语言基础关键字的含义和使用方法

​关键字在C语言中扮演着非常重要的角色,它们定义了语言的基本构造和语法规则,通过使用关键字,开发者可以创建变量、定义数据类型、控制程序流程(如循环和条件判断)、声明函数等。由于这些字是保留的,所以编程者不能将它们用作自定义的标识符,以避免与语言本身的语法产生冲突。不同的编译器和版本会有不同的扩展关键字,常用C语言标准是C89、C99、C11、C17、C23,c/c++ 标准可以在以下标准官网查看:
https://en.cppreference.com/w/c/23
https://isocpp.org/
https://www.iec.ch/homepage
以下是最常见的C语言关键字。

关键字类型

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

其中数据类型关键字包括:char、double、float、int、long、short、signed、struct、union、unsigned、void、enum,用于声明不同类型的数据或函数。

控制语句关键字包括:循环语句的for、do、while、break、continue;条件语句的if、else、goto;开关语句的switch、case、default;以及返回语句的return,用于控制程序的流程。

存储类型关键字包括:auto、extern、register、static、typedef,这些关键字用于指定变量的存储类型和可见性。

其他关键字包括:const、sizeof、volatile。

数据类型关键字


数据类型关键字含义表如下:

关键字含义
char字符数据类型,用于存储单个字符,通常占用1个字节。
double双精度浮点数数据类型,可以存储大范围和高精度的实数,通常占用8个字节。
float单精度浮点数数据类型,用于存储实数,精度和范围较double小,通常占用4个字节。
int整型数据类型,用于存储整数,大小依赖于编译器和平台,通常是4个字节。
long长整型数据类型,用于存储较大的整数,大小依赖于编译器和平台,通常至少4个字节。
short短整型数据类型,用于存储较小的整数,通常占用2个字节。
signed有符号数据类型,与整型结合使用,表示可以存储正数和负数(默认是有符号的)。
struct定义一个结构体类型,结构体是一种用户自定义的数据类型,包含多个数据成员。
union定义一个联合体类型,允许在相同内存位置存储不同类型的数据,但一次只能存储一种。
unsigned无符号数据类型,与整型结合使用,表示只能存储非负整数。
void无类型,常用于表示函数不返回任何值,或用于通用指针类型(void*)。
enum定义枚举类型,枚举是一种包含命名整型常量的用户定义类型,提供更易读和类型检查。

可以看到除了字符数据和整数、浮点数、非负整数(unsigned)以外,还存在枚举类型、结构体、联合体及无类型关键字.

整数、浮点数、非负整数的运用:
#include <stdio.h>int main() {  // char char c = 'A';  printf("字符类型: %c\n", c);  // double  double d = 3.141592653589793;  printf("双精度浮点类型: %f\n", d);  // float float f = 3.14f;  printf("单精度浮点类型: %f\n", f);  // int 类型  int i = 10;  printf("整型: %d\n", i);  // long 类型  long l = 123456789L;  printf("长整型: %ld\n", l);  // short 类型  short s = 123;  printf("短整型: %d\n", s);  // signed 类型(通常int默认就是signed int)  signed int si = -10;  printf("有符号整型: %d\n", si);  // unsigned 类型  unsigned int ui = 4294967295; // 最大的32位无符号整数  printf("无符号整型: %u\n", ui);  return 0;  
}

以上代码运行结果:
在这里插入图片描述

枚举类型:

枚举是一种用户定义的数据类型,它允许为整数值分配有意义的名称,通过使用枚举,可以使用描述性的名称而不是数字来表示特定的值,

#include <stdio.h>  // 定义枚举类型Pig  
enum Pig { GGBOND, FEIFEI, CHAORENQIANG };  int main() {  enum Pig favoritName = GGBOND; // 声明并初始化枚举变量  // 使用 switch 语句根据枚举值进行不同的操作  switch (favoritName) {  case FEIFEI:  printf("My favoriteName is FEIFEI.\n");  break;  case GGBOND:  printf("My favoriteName is GGBOND.\n");  break;  case CHAORENQIANG:  printf("My favoriteName is CHAORENQIANG.\n");  break;  default:  printf("Unknown pig's name.\n");  break;  }  return 0;  
}

在这里插入图片描述

结构体:

结构体通常用于表示具有多个属性的复杂对象,如一只包含姓名、年龄和地址的猪猪,它允许将不同类型的数据组合成一个单一的复合类型。

#include <stdio.h>  
#include <string.h>  // 定义结构体类型 PIG  
struct PIG {  char name[50];  // [50]表示访问结构体成员name中索引为50的字符int age;  
};  int main() {  struct PIG PIG; // 声明结构体变量  strcpy(PIG.name, "GGBond");PIG.age = 18; printf("Name: %s\n", PIG.name);  printf("Age: %d\n", PIG.age);  return 0;  
}

在这里插入图片描述

联合体:

联合体也是一种用户定义的数据类型,它允许在相同的内存位置存储不同的数据类型,但一次只能存储其中之一,一般用于节省内存,因为它只分配足够的内存来存储其最大的成员,所有成员都共享这块内存。

#include <stdio.h>  
#include <string.h>// 定义联合体类型 Data  
union Data {  int i;  float f;  char str[20];  
};  int main() {  union Data data; // 声明联合体变量  data.i = 10; // 给整型成员赋值  printf("Integer value: %d\n", data.i); data.f = 3.14f; // 给浮点型成员赋值,整型值被覆盖  printf("Float value: %f\n", data.f); strcpy(data.str, "Hello GGBond"); // 给字符串成员赋值,整型和浮点型值都将覆盖  printf("String value: %s\n", data.str); return 0;  
}
// 通常不会在一个联合体中混合使用不同类型的成员,并频繁地改变值,可能会导致未定义的行为。

在这里插入图片描述#### 无类型:
void类型常用于函数返回类型,表示该函数不返回任何值,它也可以用作指针类型void*,表示一个通用指针,可以指向任何类型的数据(常用于泛型编程或处理不同类型数据的函数)。

#include <stdio.h>  // 声明一个返回类型为 void 的函数,表示该函数不返回任何值  
void printMessage(const char *message) {  printf("%s\n", message);  
}  int main() {  printMessage("Hello GGBond!"); // 调用函数,不期望返回值  return 0;  
}

控制语句关键字

关键字描述
for用于创建一个循环,该循环将重复执行一段代码,直到满足某个条件。通常用于已知循环次数的场景。
dowhile一起使用,创建一个后测试的循环。即无论条件是否满足,循环体至少会执行一次。
while用于创建一个循环,只要指定的条件为真,就会重复执行一段代码。
break用于立即退出循环或switch语句,跳过循环或switch语句中剩余的代码,并继续执行紧随其后的语句。
continue用于跳过当前循环的剩余代码,并立即开始下一次循环迭代。
条件语句
if用于基于某个条件来执行代码。如果条件为真,则执行if语句后的代码块。
elseif语句一起使用,如果if语句的条件为假,则执行else语句后的代码块。
goto用于无条件地跳转到程序中指定的标签处继续执行。通常不建议使用,因为它可能使程序流程变得难以理解和维护。
开关语句
switch用于基于一个表达式的值来选择多个代码块之一来执行。通常用于多个条件分支的场景。
caseswitch语句中使用,表示一个具体的分支条件。如果switch表达式的值与某个case标签的值匹配,则执行该case后的代码。
defaultswitch语句中使用,表示当没有case标签与switch表达式的值匹配时执行的默认代码块。
返回语句
return用于从函数中返回一个值,并结束函数的执行。如果函数没有返回值,则可以使用return;来提前退出函数。

这个表格简要概述了这些关键字在C语言中的基本含义。在实际编程中,这些关键字的使用可能会更加复杂和灵活。

循环语句:

for循环:

#include <stdio.h>  int main() {  int i;  for (i = 0; i < 5; i++) {  printf("%d ", i);  }  return 0;  
}  

在这里插入图片描述
do-while 循环

#include <stdio.h>  int main() {  int i = 0;  do {  printf("%d ", i);  i++;  } while (i < 5);  return 0;  
}  

在这里插入图片描述
break 语句

#include <stdio.h>  int main() {  int i;  for (i = 0; i < 10; i++) {  if (i == 5) {  break; // 当 i 循环到 5 时退出循环  }  printf("%d ", i);  }  return 0;  
}  

在这里插入图片描述

条件语句

if判断

#include <stdio.h>  int main() {  int x = 10;  if (x > 5) {  printf("x is greater than 5\n");  }  return 0;  
}  

在这里插入图片描述
else 语句

#include <stdio.h>  int main() {  int x = 3;  if (x > 5) {  printf("x is greater than 5\n");  } else {  printf("x is not greater than 5\n");  }  return 0;  
}  

在这里插入图片描述
continue:
用于在循环中跳过当前迭代的剩余部分,并立即开始下一次迭代

#include <stdio.h>  int main() {  for (int i = 0; i < 10; i++) {  if (i % 2 == 0) {  continue; // 跳过偶数,只打印奇数  }  printf("%d\n", i);  }  return 0;  
}

在这里插入图片描述
goto:
用于无条件跳转到程序中指定的标签位置。尽管goto在现代编程中通常不推荐使用,因为它可能导致代码流程难以追踪和理解,在某些特定情况下使用

#include <stdio.h>  int main() {  int i;  for (i = 0; i < 10; i++) {  if (i == 5) {  goto skip_loop; // 当i等于5时,跳出循环  }  printf("%d\n", i);  }  
skip_loop:  printf("Loop skipped when i was %d\n", i);  return 0;  
}

在这里插入图片描述
case和default:
用于switch语句中,用于根据不同的条件执行不同的代码块。case后面跟的是要匹配的值,而default是当没有case匹配时执行的代码块。

#include <stdio.h>  int main() {  int day = 4; switch (day) {  case 1:  printf("Monday\n");  break;  case 2:  printf("Tuesday\n");  break;  case 3:  printf("Wednesday\n");  break;  case 4:  printf("Thursday\n");  break;  case 5:  printf("Friday\n");  break;  case 6:  printf("Saturday\n");  break;  case 0:  printf("Sunday\n");  break;  default:  printf("Invalid day number\n"); // 如果day不是0到6之间的数字,将执行此语句  break;  }  return 0;  
}

在这里插入图片描述

开关语句

switch 语句

#include <stdio.h>  int main() {  int day = 3;  switch (day) {  case 1:  printf("Monday\n");  break;  case 2:  printf("Tuesday\n");  break;  case 3:  printf("Wednesday\n");  break;  default:  printf("Other day\n");  }  return 0;  
}  

在这里插入图片描述

返回语句

return 语句

#include <stdio.h>  int add(int a, int b) {  return a + b; // 返回 a 和 b 的和  
}  int main() {  int sum = add(3, 4);  printf("Sum: %d\n", sum);  return 0;  
}  

在这里插入图片描述

存储类型关键字

关键字含义
auto声明变量的生存期为自动,即变量在进入其声明的程序块时建立,在该程序块活动时存在,退出该程序块时撤销。但在现代C语言中,由于所有非全局变量的缺省值都假定为auto,因此这个关键字很少显式使用。
extern声明一个变量或函数是在其他地方定义的,具有外部链接。它告诉编译器这个变量或函数是在其他文件中定义的,编译器会在链接阶段将其与其他文件中的定义进行关联。通常用于跨文件共享变量或函数。
register提示编译器该变量是一个频繁使用的变量,如果可能的话,应该将它存储在CPU的寄存器中以提高访问速度。但现代编译器通常会自动进行优化,因此这个关键字的实际效果可能因编译器而异。
static用于修饰局部变量、全局变量和函数。对于局部变量,它会使变量存储在静态区,函数返回时值保持不变,且下次进入函数时依然存在。对于全局变量,它会限制变量的作用域仅在当前文件内,避免不同文件同名变量的冲突。对于函数,它会使函数只能在声明它的文件内可见。
typedef为现有的数据类型定义一个新的名称。它通常用于简化复杂的类型声明或为某种类型创建更具描述性的名称。typedef并不创建新的数据类型,而是为现有的数据类型创建一个别名。

auto:
用于声明自动变量,但在C语言中,局部变量默认就是自动变量,基本很少使用:

#include <stdio.h>  int main() {  auto int a = 10; // 这里的auto是可选的,因为局部变量默认就是自动变量  printf("Value of a: %d\n", a);  return 0;  
}

extern:
用于声明全局变量或函数,表明它们的定义在别的文件中,以下是在一个文件夹中新建两个文件 GGBond1.c和GGBond2.c,随后编译运行GGBond2.c文件

// GGBond1.c
#include <stdio.h>  int global_var = 10; // 全局变量定义  void print_global_var() {  printf("Value of global_var: %d\n", global_var);  
}
// GGBond2.c
#include <stdio.h>  extern int global_var; // 声明在其他文件中定义的全局变量  
extern void print_global_var(); // 声明在其他文件中定义的函数  int main() {  printf("Accessing global_var from another file: %d\n", global_var);  print_global_var(); // 调用在其他文件中定义的函数  return 0;  
}

编写完成后在终端同时编译两个文件:

gcc GGBond1.c GGBond2.c -o GGBond2

运行编译好的GGBond2文件:

./GGBond

在这里插入图片描述

register:
这个关键字用来建议编译器将变量存储在寄存器中以提高访问速度,但现代编译器通常会自动进行优化,基本很少使用:

#include <stdio.h>  int main() {  register int counter = 0; // 建议编译器将counter存储在寄存器中  for (int i = 0; i < 10000; i++) {  counter++;  }  printf("Counter: %d\n", counter);  return 0;  
}

在这里插入图片描述
static:
这个关键字有多个用途,包括定义静态变量和静态函数。静态变量在程序执行期间只初始化一次,而静态函数只能在定义它的文件中访问。

#include <stdio.h>  void static_function() { // 静态函数,只能在当前文件中调用  static int call_count = 0; // 静态变量,只初始化一次  call_count++;  printf("static_function called %d times\n", call_count);  
}  int main() {  static_function();static_function();return 0;  
}

在这里插入图片描述
typedef:
这个关键字用于为数据类型定义别名,使代码更易读和维护(强烈推荐使用)

#include <stdio.h>  typedef unsigned long ulong; // 为unsigned long定义别名ulong  
typedef struct {  int x;  int y;  
} Point; // 为结构体定义别名Point  int main() {  ulong number = 123456789012345UL; // 使用别名ulong代替unsigned long  Point p = {5, 10}; // 使用别名Point代替结构体名称  printf("Number: %lu, Point: (%d, %d)\n", number, p.x, p.y);  return 0;  
}

在这里插入图片描述
restrict:
用于告诉编译器,两个或多个指针不会指向相同的内存地址,从而允许编译器进行更优化的内存访问。

/*
构建一个add_arrays函数,使用restrict关键字来表明a、b和c三个指针不会指向相同的内存区域,
允许编译器在生成代码时进行更优化的内存访问。
*/
#include <stdio.h>  void add_arrays(const int *restrict a, const int *restrict b, int *restrict c, int n) {  for (int i = 0; i < n; i++) {  c[i] = a[i] + b[i];  }  
}  int main() {  int a[5] = {1, 2, 3, 4, 5};  int b[5] = {6, 7, 8, 9, 10};  int c[5];  add_arrays(a, b, c, 5);  for (int i = 0; i < 5; i++) {  printf("%d ", c[i]);  }    return 0;  
}

inline:
用于建议编译器将函数的调用替换为函数体的直接插入,以减少函数调用的开销。

#include <stdio.h>  inline int square(int x) {  return x * x;  
}  int main() {  int x = 5;  printf("The square of %d is %d\n", x, square(x));  return 0;  
}

其他类型关键字

关键字含义
const声明一个变量的值是不可变的,即常量。这意味着一旦赋值后,其值就不能被修改。这有助于增加代码的可读性和安全性,防止意外修改不应改变的值。
sizeof运算符,用于获取特定类型或对象在内存中所占的字节大小。这有助于内存管理和优化,以及确保数据结构的大小符合预期。
volatile告诉编译器不要优化涉及该变量的代码,因为它可能会在程序运行时被意外地改变。这通常用于多线程环境、硬件访问或中断服务程序中,以确保每次使用该变量时都从内存中重新读取其值,而不是使用缓存的值。

这些关键字在C语言编程中起着重要作用,帮助开发者更精确地控制变量的行为和内存使用。

声明常亮关键字

声明常量使用const关键字,被他声明的值在程序运行期间不能被修改

#include <stdio.h>  int main() {  const int a = 10; // 声明一个常量整数a,并初始化为10,如果尝试修改a的值,编译器会报错  int a = 20; printf("Value of a: %d\n", a); return 0;  
}

运行后会报错,删掉 int a = 20; 即可正常运行:

test.c: In function ‘main’:
test.c:6:9: error: conflicting type qualifiers for ‘a’6 |     int a = 20;|         ^
test.c:4:15: note: previous definition of ‘a’ with type ‘int’4 |     const int a = 10; // 声明一个常量整数a,并初始化为10|               ^
sizeof 关键字

sizeof是一个运算符,用于获取数据类型或对象在内存中所占的字节数

#include <stdio.h>  int main() {  printf("Size of char: %zu bytes\n", sizeof(char));  printf("Size of int: %zu bytes\n", sizeof(int));  printf("Size of float: %zu bytes\n", sizeof(float));  printf("Size of double: %zu bytes\n", sizeof(double));  int array[10];  printf("Size of array: %zu bytes\n", sizeof(array));  char GGBond[10];printf("Size of GGBond: %zu bytes\n", sizeof(GGBond));struct ExampleStruct {  int a;  float b;  };  printf("Size of struct ExampleStruct: %zu bytes\n", sizeof(struct ExampleStruct));  return 0;  
}

在这里插入图片描述

volatile 关键字

volatile关键字用于告诉编译器,某个变量的值可能会在编译器无法检测到的情况下被改变,因此编译器不应对其进行优化。这通常用于多线程编程、硬件访问或信号处理等场景。

#include <stdio.h>  
#include <stdbool.h>  
#include <unistd.h> // 使用里面的sleep函数  
#include <pthread.h> // 多线程操作  volatile bool stop = false; void* threadFunction(void* arg) {  while (!stop) {  // 模拟一些工作  sleep(1);  }  return NULL;  
}  int main() {  pthread_t thread;  pthread_create(&thread, NULL, threadFunction, NULL);  sleep(5); // 主线程休眠5秒  stop = true; // 修改volatile变量停止工作线程  pthread_join(thread, NULL); // 等待工作线程结束  printf("Thread stopped.\n");  return 0;  
}
/*
stop变量被声明为volatile,以确保当主线程修改它的值时,
工作线程能够立即看到这个变化,而不会因为编译器的优化而延迟或忽略这个变化
*/

关键字总表

数据类型关键字

关键字含义
char字符类型
double双精度浮点类型
float单精度浮点类型
int整型
long长整型
short短整型
signed有符号整型(可省略,因为整型默认就是有符号的)
unsigned无符号整型

存储类别关键字

关键字含义
auto自动变量(默认存储类别)
extern外部变量声明
register寄存器变量
static静态变量

控制语句关键字

关键字含义
break跳出循环或switch语句
caseswitch语句中的一个分支标签
continue跳过当前循环的剩余部分,进入下一次循环
defaultswitch语句中的默认分支标签
dodo-while循环的开始
elseif语句的else分支
forfor循环
goto无条件跳转到指定的标签
if条件语句
return从函数中返回
switchswitch选择结构
whilewhile循环

其他关键字

关键字含义
const定义常量或只读变量
inline建议编译器内联函数(即将函数调用替换为函数体)
restrict指出指针是访问其指向对象的唯一方式
sizeof获取数据类型或对象的大小(字节为单位)
typedef为数据类型定义别名
volatile提示编译器该变量可能会被意外改变

复杂数据类型和结构关键字

关键字含义
enum枚举类型
struct结构体类型
union联合类型

Markdown版本总表

**数据类型关键字**| 关键字 | 含义 |
| --- | --- |
| `char` | 字符类型 |
| `double` | 双精度浮点类型 |
| `float` | 单精度浮点类型 |
| `int` | 整型 |
| `long` | 长整型 |
| `short` | 短整型 |
| `signed` | 有符号整型(可省略,因为整型默认就是有符号的) |
| `unsigned` | 无符号整型 |**存储类别关键字**| 关键字 | 含义 |
| --- | --- |
| `auto` | 自动变量(默认存储类别) |
| `extern` | 外部变量声明 |
| `register` | 寄存器变量 |
| `static` | 静态变量 |**控制语句关键字**| 关键字 | 含义 |
| --- | --- |
| `break` | 跳出循环或switch语句 |
| `case` | switch语句中的一个分支标签 |
| `continue` | 跳过当前循环的剩余部分,进入下一次循环 |
| `default` | switch语句中的默认分支标签 |
| `do` | do-while循环的开始 |
| `else` | if语句的else分支 |
| `for` | for循环 |
| `goto` | 无条件跳转到指定的标签 |
| `if` | 条件语句 |
| `return` | 从函数中返回 |
| `switch` | switch选择结构 |
| `while` | while循环 |**其他关键字**| 关键字 | 含义 |
| --- | --- |
| `const` | 定义常量或只读变量 |
| `inline` | 建议编译器内联函数(即将函数调用替换为函数体) |
| `restrict` | 指出指针是访问其指向对象的唯一方式 |
| `sizeof` | 获取数据类型或对象的大小(字节为单位) |
| `typedef` | 为数据类型定义别名 |
| `volatile` | 提示编译器该变量可能会被意外改变 |**复杂数据类型和结构关键字**| 关键字 | 含义 |
| --- | --- |
| `enum` | 枚举类型 |
| `struct` | 结构体类型 |
| `union` | 联合类型 |

相关文章:

C语言基础关键字的含义和使用方法

​关键字在C语言中扮演着非常重要的角色&#xff0c;它们定义了语言的基本构造和语法规则&#xff0c;通过使用关键字&#xff0c;开发者可以创建变量、定义数据类型、控制程序流程&#xff08;如循环和条件判断&#xff09;、声明函数等。由于这些字是保留的&#xff0c;所以编…...

【Golang - 90天从新手到大师】Day09 - string

系列文章合集 Golang - 90天从新手到大师 String 一个字符串是一个不可改变的字节序列。字符串可以包含任意的数据&#xff0c;但是通常是用来包含人类可读的文本。 len()返回字符串字节数目&#xff08;不是rune数&#xff09;。 通过索引可以访问某个字节值&#xff0c;0…...

网络安全与区块链技术:信任与安全的融合

# 网络安全与区块链技术&#xff1a;信任与安全的融合 在网络空间&#xff0c;信任是一种宝贵而稀缺的资源。区块链技术以其独特的分布式账本、加密算法和共识机制&#xff0c;为构建网络安全提供了新的解决方案。本文将探讨网络安全与区块链技术如何融合&#xff0c;以增强信…...

MySQL之复制(九)

复制 复制管理和维护 确定主备是否一致 在理想情况下&#xff0c;备库和主库的数据应该是完全一样的。但事实上备库可能发生错误并导致数据不一致。即使没有明显的错误&#xff0c;备库同样可能因为MySQL自身的特性导致数据不一致&#xff0c;例如MySQL的Bug、网络中断、服务…...

【面试干货】 Java 中的 HashSet 底层实现

【面试干货】 Java 中的 HashSet 底层实现 1、HashSet 的底层实现2、 HashSet 的特点3、 总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; HashSet 是 Java 集合框架中的一个重要成员&#xff0c;它提供了不存储重复元素的集合。但是&am…...

爬虫经典案例之爬取豆瓣电影Top250(方法二)

在上一篇文章的基础上&#xff0c;改进了代码质量&#xff0c;增加了多个正则表达式匹配&#xff0c;但同事也增加了程序执行的耗时。 from bs4 import BeautifulSoup import requests import time import re from random import randint import pandas as pdurl_list [https…...

如何优化React应用的性能?

优化React应用的性能是一个多方面的过程&#xff0c;涉及到代码的编写、组件的设计、资源的管理等多个层面。以下是一些常见的性能优化策略&#xff1a; 避免不必要的渲染: 使用React.memo、useMemo和useCallback来避免组件或其子组件不必要的重新渲染。 代码分割: 使用React.…...

css文字镂空加描边

css文字镂空加描边 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>文字镂空</title><style>/* 公用样式 */html,body{width: 100%;height: 100%;position: relative;}/* html{overflow-y: scroll;} */*{margi…...

python数据分析与可视化

Python 在数据分析和可视化方面有着广泛的应用,并且拥有众多强大的库和工具来支持这些任务。以下是一些常用的 Python 库和它们的主要用途: 数据分析 Pandas: Pandas 是 Python 中用于数据处理和分析的主要库。 它提供了数据框(DataFrame)和序列(Series)两种数据结构…...

webkit 的介绍

WebKit 是一个开源的网页浏览器引擎&#xff0c;它是 Safari 浏览器和许多其他应用程序的基础。WebKit 最初由苹果公司开发&#xff0c;并在2005年作为开源项目发布。WebKit 的核心组件包括 WebCore 和 JavaScriptCore。以下是 WebKit 的详细介绍&#xff1a; ### WebKit 的主…...

make与makefile

目录 一、make的默认目标文件与自动推导 二、不能连续make的原因 执行原理 touch .PHONY伪目标 make指令不回显 makefile多文件管理 简写依赖方法 三、回车与换行 四、缓冲区 一、make的默认目标文件与自动推导 假设这是一个makefile文件&#xff0c;make的时候默认生…...

深度神经网络一

文章目录 深度神经网络 (DNN)1. 概述2. 基本概念3. 网络结构 深度神经网络的层次结构详细讲解1. 输入层&#xff08;Input Layer&#xff09;2. 隐藏层&#xff08;Hidden Layers&#xff09;3. 输出层&#xff08;Output Layer&#xff09;整体流程深度神经网络的优点深度神经…...

Pnpm:包管理的新星,如何颠覆 Npm 和 Yarn

在探索现代 JavaScript 生态系统时&#xff0c;我们常常会遇到新兴技术的快速迭代和改进。其中&#xff0c;包管理工具的发展尤为重要&#xff0c;因为它们直接影响开发效率和项目性能。最近&#xff0c;pnpm 作为一种新的包管理工具引起了广泛关注。它不仅挑战了传统工具如 np…...

汽车IVI中控开发入门及进阶(三十二):i.MX linux开发之Yocto

前言: 对于NXP的i.mx,如果基于linux开发,需要熟悉以下文档: IMX_YOCTO_PROJECT_USERS_GUIDE.pdf IMX_LINUX_USERS_GUIDE.pdf IMX_GRAPHICS_USERS_GUIDE.pdf 如果基于android开发,需要熟悉一下文档: Android_Auto_Quick_Start_Guide.pdf ANDROID_USERS_GUIDE.pdf …...

tessy 编译报错:单元测试时,普通桩函数内容相关异常场景

目录 1&#xff0c;失败现象 2&#xff0c;原因分析 1&#xff0c;失败现象 1&#xff0c;在 step 桩函数正常的情况下报错。 2&#xff0c;测试代码执行的数据流 和 step 桩函数内容不一致。 2&#xff0c;原因分析 桩函数分为 test object, test case, test step 三种类别。…...

计算机专业是否仍是“万金油”

作为一名即将参加高考的学生&#xff0c;我站在人生的分岔路口上&#xff0c;面临着选择大学专业的重大抉择。在这个关键节点&#xff0c;计算机相关专业是否仍是炙手可热的选择&#xff1f;  首先&#xff0c;从行业的角度来看&#xff0c;计算机相关专业确实在近年来持续火…...

雷池社区版自动SSL

正常安装雷池&#xff0c;并配置站点&#xff0c;暂时不配置ssl 不使用雷池自带的证书申请。 安装&#xff08;acme.sh&#xff09;&#xff0c;使用域名验证方式生成证书 先安装git yum install git 或者 apt-get install git 安装完成后使用 git clone https://gitee.com/n…...

怎样减少徐州服务器租用的成本?

服务器租用的出现&#xff0c;十分便于网络行业的发展&#xff0c;但是随着服务器租用的广泛应用&#xff0c;整体还是有着一定的成本的吗&#xff0c;不同的服务器类型在价格方面也是不同的&#xff0c;那么企业在选择服务器租用后&#xff0c;怎样才能减少服务器租用的成本呢…...

【性能优化】表分桶实践最佳案例

分桶背景 随着企业的数据不断增长&#xff0c;数据的分布和访问模式变得越来越复杂。我们前面介绍了如何通过对表进行分区来提高查询效率&#xff0c;但对于某些特定的查询模式&#xff0c;特别是需要频繁地进行数据联接查或取样的场景&#xff0c;仍然可能面临性能瓶颈。此外…...

数据仓库的挑战

建设数据仓库是一个复杂且资源密集的过程&#xff0c;需要考虑多个方面。以下是建设数据仓库时常见的挑战及其详细解释&#xff1a; 1. 数据集成 挑战&#xff1a; 数据来源多样&#xff1a;数据来自不同的系统、数据库、文件格式&#xff08;如CSV、JSON、XML&#xff09;、…...

基于ResNet-18的简单分类(新手,而且网络效果不咋滴,就是学个流程)

引言 先看问题&#xff1a; 我手边有一数据集&#xff0c;然后我想分分类&#xff01;~~ 咳咳&#xff0c;最近刚做了一个&#xff1a;训练集有1143张&#xff0c;分为5类&#xff0c;里面图片是打乱的。测试集有248张&#xff0c;想把它分分类看看咋样。 再看一下效果: …...

自动化测试:Autorunner的使用

自动化测试&#xff1a;Autorunner的使用 一、实验目的 1、掌握自动化测试脚本的概念。 2、初步掌握Autorunner的使用 二、Autorunner的简单使用 autoRunner使用方法 新建项目 a) 在项目管理器空白区域,右键鼠标,选择新建项目 b) 输入项目名后,点击[确定]. 在初次打开aut…...

时序预测 | Matlab基于CNN-BiLSTM-Attention多变量时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于CNN-BiLSTM-Attention多变量时间序列多步预测&#xff1b; 2.多变量时间序列数据集&#xff08;负荷数据集&#xff09;&#xff0c;采用前96个时刻预测的特征和负荷数据预测未来96个时刻的负荷数据&…...

软考 系统架构设计师系列知识点之杂项集萃(42)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;41&#xff09; 第67题 Windows操作系统在图形界面处理方面采用的核心架构风格是&#xff08; &#xff09;风格。Java语言宣传的“一次编写&#xff0c;到处运行”的特性&#xff0c;从架构风格…...

FastBoot刷机获取root权限(Magisk)

1.首先要下载ADB、Fastboot等工具。 1.ADB、Fastboot工具 https://developer.android.com/studio/releases/platform-tools 2.安装FastBoot的USB驱动 https://developer.android.com/studio/run/oem-usb 2.下载对应的镜像 https://developers.google.com/android/images?…...

信息检索(43):SPLADE: Sparse Lexical and Expansion Model for First Stage Ranking

SPLADE: Sparse Lexical and Expansion Model for First Stage Ranking 摘要1 引言2 相关工作3 方法3.1 SparTerm3.2 SPLADE&#xff1a;稀疏词汇和扩展模型 4 实验5 结论 发布时间&#xff08;2021&#xff09; 标题&#xff1a;稀疏词汇 扩展模型 摘要 稀疏的优点&#xf…...

DockerHub 镜像加速

Docker Hub 作为目前全球最大的容器镜像仓库&#xff0c;为开发者提供了丰富的资源。Docker Hub 是目前最大的容器镜像社区&#xff0c;DokcerHub的不能使用,导致在docker下pull镜像无法下载,安装kubernetes镜像也受到影响,下面请看解决方式。 1.加速原理 Docker下载加速的原理…...

Oracle 迁移 Mysql

-- Oracle->MySQL -- 使用时改一下where条件的owner和table_name -- 字段数据类型映射时会将Oracle中的浮点NUMBER转换为decimal(65,8)定点数 -- 可以识别主键约束、非空约束&#xff0c;但无法识别外键约束、唯一约束、自定义check -- 对于Oracle字符串长度为4000的&#x…...

vue3父子组件通信

一&#xff0c;父传子——defineProps 方法&#xff1a; 在父组件的模板中使用子组件标签&#xff0c;并且给标签自定义属性和属性名&#xff0c;即通过v-bind绑定数值&#xff0c;而后传给子组件&#xff1b;子组件则通过defineProps接收使用。 父组件&#xff1a; <tem…...

CSS中使用应用在伪元素中的计数器属性counter-increment

在CSS中&#xff0c;counter-increment 是一个用于递增计数器值的属性。它通常与 counter-reset 和 content 属性一起使用&#xff0c;以在文档中的特定位置&#xff08;如列表项、标题等&#xff09;插入自动生成的数字或符号。 counter-increment 基本用法&#xff1a; 使…...

【SkiaSharp绘图08】SKPaint方法:自动换行、是否乱码、字符偏移、边界、截距、文本轮廓、测量文本

文章目录 SKPaint方法BreakText 计算指定宽度内可绘制的字符个数ContainsGlyphs字体是否包含文本字符(是否会乱码)GetGlyphOffsets 字符偏移量GetGlyphPositions 偏移坐标GetGlyphWidths 每个字符的宽度与边界GetHorizontalTextIntercepts 轮廓截距GetPositionedTextIntercepts…...

深入理解Servlet Filter及其限流实践

引言 在Java Servlet技术中&#xff0c;Filter是一个拦截器&#xff0c;它允许开发者在请求到达目标资源之前或响应发送给客户端之后&#xff0c;对请求或响应进行拦截和处理。这种机制为实现诸如身份验证、日志记录、请求修改等功能提供了极大的灵活性。 Filter基础 Filter…...

使用cv2对视频指定区域进行去噪

视频去噪其实和图象一样&#xff0c;只是需要现将视频截成图片&#xff0c;在对图片进行去噪&#xff0c;将去噪的图片在合成视频就行。可以利用cv2.imread()、imwrite()等轻松实现。 去噪步骤 1、视频逐帧读成图片 2、图片指定区域批量去噪 2、去噪后的图片写入视频 1、视频逐…...

AI在创造还是毁掉音乐?

AI对音乐产业的影响是复杂而多维的&#xff0c;既有创造性的贡献也存在潜在的挑战。我们可以从以下几个角度来分析这个问题&#xff1a; ### 创造性贡献 1. **音乐创作**&#xff1a;AI可以帮助音乐家创作新的旋律和和声&#xff0c;甚至生成完整的音乐作品。例如&#xff0c…...

【2023年全国青少年信息素养大赛智能算法挑战赛复赛真题卷】

目录 2023全国青少年信息素养大赛智能算法挑战赛初中组复赛真题 2023全国⻘少年信息素养⼤赛智能算法挑战复赛⼩学组真题 2023全国青少年信息素养大赛智能算法挑战赛初中组复赛真题 1. 修复机器人的对话词库错误 【题目描述】 基于人工智能技术的智能陪伴机器人的语言词库被…...

Android系统揭秘(一)-Activity启动流程(上)

public ActivityResult execStartActivity( Context who, IBinder contextThread, IBinder token, Activity target, Intent intent, int requestCode, Bundle options) { IApplicationThread whoThread (IApplicationThread) contextThread; … try { … int result …...

使用Java实现哈夫曼编码

前言 哈夫曼编码是一种经典的无损数据压缩算法&#xff0c;它通过赋予出现频率较高的字符较短的编码&#xff0c;出现频率较低的字符较长的编码&#xff0c;从而实现压缩效果。这篇博客将详细讲解如何使用Java实现哈夫曼编码&#xff0c;包括哈夫曼编码的原理、具体实现步骤以…...

IDEA、PyCharm等基于IntelliJ平台的IDE汉化方式

PyCharm 或者 IDEA 等编辑器是比较常用的&#xff0c;默认是英文界面&#xff0c;有些同学用着不方便&#xff0c;想要汉化版本的&#xff0c;但官方没有这个设置项&#xff0c;不过可以通过插件的方式进行设置。 方式1&#xff1a;插件安装 1、打开设置 File->Settings&a…...

visual studio 创建c++项目

目录 环境准备&#xff1a;安装 visual studiovisual studio 创建c项目Tips&#xff1a;新建cpp文件注释与取消注释代码 其他初学者使用Visual Studio开发C和C时常遇到的3个坑 环境准备&#xff1a;安装 visual studio 官网&#xff1a;https://visualstudio.microsoft.com/zh…...

MGV电源维修KUKA机器人电源模块PH2003-4840

MGV电源维修 库卡电源模块维修 机器人电源模块维修 库卡控制器维修 KUKA电源维修 库卡机器人KUKA主机维修 KUKA驱动器模块维修 机械行业维修&#xff1a;西门子系统、法那克系统、沙迪克、FIDIA、天田、阿玛达、友嘉、大宇系统&#xff1b;数控冲床、剪板机、折弯机等品牌数控…...

设置浏览器互不干扰

目录 一、查看浏览器文件路径 二、 其他盘新建文件夹Cache 三、以管理员运行CMD 四、执行命令 一、查看浏览器文件路径 chrome://version/ 二、 其他盘新建文件夹Cache D:\chrome\Cache 三、以管理员运行CMD 四、执行命令 Mklink /d "C:\Users\Lenovo\AppData\Loca…...

kafka操作命令详解

目录 1、集群运维命令 1.1、集群启停命令 1.3、集群迁移命令 1.4、权限管理命令 1.4.1、权限参数介绍 1.4.2、增加权限命令 1.4.3、移出权限命令 1.4.4、查看所有topic权限命令 1.4.5、查看某个topic权限命令 2、生产者命令 2.1、创建topic命令 2.2、删除topic命令 …...

graalvm jdk和openjdk

下载地址:https://github.com/graalvm/graalvm-ce-builds/releases 官网: https://www.graalvm.org...

docker基础使用教程

1.准备工作 例子&#xff1a;工程在docker_test 生成requirements.txt文件命令&#xff1a;&#xff08;使用参考链接2&#xff09; pip list --formatfreeze > requirements.txt 参考链接1&#xff1a; 安装pipreqs可能比较困难 python 项目自动生成环境配置文件require…...

计算机网络 交换机的安全配置

一、理论知识 1.交换机端口安全功能介绍 交换机端口安全功能是针对交换机端口进行安全属性的配置&#xff0c;以控制用户的安全接入。主要包括以下两种配置项&#xff1a; ①限制交换机端口的最大连接数&#xff1a;控制交换机端口连接的主机数量&#xff1b;防止用户进行恶…...

深入解析大语言模型系列:Transformer架构的原理与应用

引言 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;近几年取得了突破性的进展&#xff0c;而 Transformer 作为这些模型的核心架构&#xff0c;功不可没。本文将详细介绍 Transformer 的原理、结…...

uni-app地图组件控制

uni.createMapContext(mapId,this) 创建并返回 map 上下文 mapContext 对象。在自定义组件下&#xff0c;第二个参数传入组件实例this&#xff0c;以操作组件内 <map> 组件。 注意&#xff1a;uni.createMapContext(mapId, this) app-nvue 平台 2.2.5 支持 uni.create…...

前端调用api发请求常用的请求头content- type的类型和常用场景

Content-Type 是一个非常重要的HTTP头&#xff0c;它定义了发送给服务器或客户端的数据的MIME类型。这对于服务器和客户端正确解析和处理数据至关重要。下面是一些常见的 Content-Type 值及其用途和区别。 常见的 Content-Type 值 text/plain • 用途: 纯文本&#xff0c;无格…...

数据仓库之SparkSQL

Apache Spark SQL是Spark中的一个组件&#xff0c;专门用于结构化数据处理。它提供了通过SQL和DataFrame API来执行结构化数据查询的功能。以下是对Spark SQL的详细介绍&#xff1a; 核心概念 DataFrame: 定义: DataFrame是一个分布式数据集合&#xff0c;类似于关系型数据库中…...

如何在 MySQL 中导入和导出数据库以及重置 root 密码

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 如何导入和导出数据库 导出 要导出数据库&#xff0c;打开终端&#xff0c;确保你没有登录到 MySQL 中&#xff0c;然后输入以下命令&…...