C 语言基本语法及实用案例分享

news2024/11/14 15:22:55

一、什么是 C 语言?

C语言是一种较早的程序设计语言,诞生于1972年的贝尔实验室。1972 年,Dennis Ritchie 设计了C语言,它继承了B语言的许多思想,并加入了数据类型的概念及其他特性。C语言是一门面向过程的计算机编程语言。

虽然它很古老,但是不妨碍它的流行。C广泛应用于底层开发,它能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

C之前的编程语言发展史
编程语言年代创建者
Algol1960International Group
BCPL1967Martin Richard
B1970Ken Thompson
Traditional C1972Dennis Ritchie
K & R C1978Kernighan & Dennis Ritchie
ANSI C1989ANSI Committee
ANSI/ISO C1990ISO Committee
C991999Standardization Committee

1.1. C 编辑器

要使用 C 就需要用于编写 C 代码的文本编辑器,这里我推荐微软出品的 Visual Studio Code 

下载地址:https://code.visualstudio.com/Download

1.2. C 基本语法

下面是一段著名的输出 “Hello World” 的基本C代码:

#include <stdio.h>
int main() {
  printf("Hello World!");
  return 0;
}

代码说明:

  • 第 1 行:#include <stdio.h> 是一个头文件库,可让我们使用输入和输出函数,例如 printf()(在第 3 行中使用)。头文件向 C++ 程序添加功能。
  • 第 2 行:main() 称为函数。 其大括号 {} 内的任何代码都将被执行。
  • 第 3 行:printf() 是用于将文本输出/打印到屏幕的函数。 在示例中,它将输出 Hello World。
  • 第 4 行:return 0 结束 main() 函数。
  • 第 5 行:不要忘记添加右大括号 } 以实际结束 main 函数。

二、基本用法

2.1. 变量

变量是存储数据值的容器,在 C 中,有不同类型的变量,例如:

  • int:存储整数(整数),不带小数,例如 123 或 -123
  • float:存储浮点数,带小数,例如 1.23 或 -1.23
  • char:存储单个字符,例如“a”或“B”,字符值用单引号括起来

基本语法: 

type variableName = value;

上述 type 是 C 类型之一(例如 int),variableName 是变量的名称(例如 x 或 myName 等可自定义), 等号用于为变量赋值。

示例:

int myNum = 12;

int myNum2; // 不赋值,然后再赋值
myNum2 = 12;

int myNum3 = 12;  // myNum3 值为 12
myNum3 = 13;      // 现在 myNum3 值为 13

float myFloatNum = 1.23; // 浮点数
char myLetter = 'D';     // 字符

int x = 1;
int y = 2;
int sum = x + y;  // 添加变量相加

int x = 1, y = 2, z = 3;  // 声明多个变量

2.2. 注释

// 这是一个注释
printf("Hello World!"); // 这是一个注释
/* 多行注释,上面的代码将打印出 Hello World!
到屏幕上,真是太棒了 */

2.3. 打印输出

printf("I am learning C.");
int testInteger = 5;
printf("Number = %d", testInteger);

float f = 1.23; // 浮点数
printf("Value = %f", f);

short a = 0b1010110;  // 2 进制数字
int b = 02713;        // 8 进制数字
long c = 0X1DAB83;    // 16 进制数字

// 以 8 进制形似输出
printf("a=%ho, b=%o, c=%lo\n", a, b, c);
// 输出 => a=126, b=2713, c=7325603

// 以 10 进制形式输出
printf("a=%hd, b=%d, c=%ld\n", a, b, c);
// 输出 => a=86, b=1483, c=1944451

// 以 16 进制形式输出(字母小写)
printf("a=%hx, b=%x, c=%lx\n", a, b, c);
// 输出 => a=56, b=5cb, c=1dab83

// 以 16 进制形式输出(字母大写)
printf("a=%hX, b=%X, c=%lX\n", a, b, c);
// 输出 => a=56, b=5CB, c=1DAB83

2.4. 格式控制符

基本语法:

%[flag][width][.precision]type
  • [ ] 表示此处的内容可有可无,是可以省略的。
  • type (必须有)表示输出类型,比如 %d、%f、%c、%lf,type 就分别对应 d、f、c、lf;再如,%-9d 中 type 对应 d。
  • width 表示最小输出宽度,也就是至少占用几个字符的位置;例如,%-9d 中 width 对应 9,表示输出结果最少占用 9 个字符的宽度。 
格式控制符说明
%c输出一个单一的字符
%hd %d %ld以十进制、有符号的形式输出 short、int、long 类型的整数
%hu %u %lu以十进制、无符号的形式输出 short、int、long 类型的整数
%ho %o %lo以八进制、不带前缀、无符号的形式输出 short、int、long 类型的整数
%#ho %#o %#lo以八进制、带前缀、无符号的形式输出 short、int、long 类型的整数
%hx %x %lx以十六进制、不带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字也小写;如果 X 大写,那么输出的十六进制数字也大写。
%hX %X %lX
%#hx %#x %#lx以十六进制、带前缀、无符号的形式输出 short、int、long 类型的整数。如果 x 小写,那么输出的十六进制数字和前缀都小写;如果 X 大写,那么输出的十六进制数字和前缀都大写。
%#hX %#X %#lX
%f %lf以十进制的形式输出 float 、double 类型的小数
%e %le %E %lE以指数的形式输出 float、double 类型的小数。如果 e 小写,那么输出结果中的 e 也小写;如果 E 大写,那么输出结果中的 E 也大写。
%g %lg %G %lG以十进制和指数中较短的形式输出 float、double 类型的小数,并且小数部分的最后不会添加多余的 0。如果 g 小写,那么当以指数形式输出时 e 也小写;如果 G 大写,那么当以指数形式输出时 E 也大写。
%s输出一个字符串

示例:

int a1=20, a2=345, a3=700;
int b1=56720, b2=9999, b3=20098;
int c1=233, c2=205, c3=1;
int d1=34, d2=0, d3=23;

printf("%-9d %-9d %-9d\n", a1, a2, a3);
printf("%-9d %-9d %-9d\n", b1, b2, b3);
printf("%-9d %-9d %-9d\n", c1, c2, c3);
printf("%-9d %-9d %-9d\n", d1, d2, d3);

上述输出结果:

20        345       700  
56720     9999      20098
233       205       1    
34        0         23  

说明:%-9d 中,d 表示以 10 进制输出,9 表示最少占 9 个字符的宽度,宽度不足以空格补齐,- 表示左对齐。 

2.5. 字符串

字符串用于存储文本/字符,C 没有 String 类型,使用 char 类型并创建一个字符 array。

char greetings[] = "Hello World!";
printf("%s", greetings);  // 访问字符串

char greetings[] = "Hello World!";
printf("%c", greetings[0]);  // 修改字符串

char greetings[] = "Hello World!";
greetings[0] = 'J';

printf("%s", greetings);
// 输出 "Jello World!"

char greetings[] = {'H','e','l','l','\0'};
printf("%s", greetings);
// 输出 "Hell!"

2.6. 条件判断

C 支持数学中的常见逻辑条件:

  • 小于:a < b
  • 小于或等于:a <= b
  • 大于:a > b
  • 大于等于:a >= b
  • 等于 a == b
  • 不等于:a != b
int mynum = 10;
if (mynum < 8) {
  printf("small");
} else {
  printf("big");
}
// 输出 -> "big"

int mynum = 12;
if (mynum < 10) {
  printf("small");
} else if (mynum < 20) {
  printf("middle");
} else {
  printf("big");
}
// 输出 -> "big"

2.7. For 循环

如果确切知道要循环一段代码的次数时,请使用 for 循环。

基本语法:

for (表达式 1; 表达式 2; 表达式 3) {
  // 要执行的代码块
}
  • 表达式 1:在代码块执行之前执行(一次)。
  • 表达式 2:定义了执行代码块的条件。
  • 表达式 3:在代码块执行后(每次)执行。

示例:

int i;

for (i = 0; i < 5; i++) {
  printf("%d\n", i);
}
int i;

for (i = 0; i < 10; i++) {
  if (i == 4) {
    break;
  }
  printf("%d\n", i);
}
// break 跳出循环

int i;

for (i = 0; i < 10; i++) {
  if (i == 4) {
    continue;
  }
  printf("%d\n", i);
}
// continue 跳出循环

2.8. While 循环

只要达到指定的条件,循环就可以执行一段代码。

基本语法:

while (条件) {
  // 要执行的代码块
}
do {
  // 要执行的代码块
} while (条件);

示例:

int i = 0;

while (i < 5) {
  printf("%d\n", i);
  i++;
}
int i = 0;

do {
  printf("%d\n", i);
  i++;
} while (i < 5);
int i = 0;

while (i < 10) {
  if (i == 4) {
    break;
  }
  printf("%d\n", i);
  i++;
}
// break 跳出循环

int i = 0;

while (i < 10) {
  i++;
  if (i == 4) {
    continue;
  }
  printf("%d\n", i);
}
// continue 跳出循环

注意:不要忘记增加条件中使用的变量,否则循环永远不会结束,成为“死循环”! 

2.9. Switch 语句

基本语法:

switch(表达式) {
  case 整型数值1:
    // 代码块 1
    break;
  case 整型数值2:
    // 代码块 2
    break;
  default:
    // 代码块 3
}

示例:

int num = 2;

switch (num) {
  case 1: printf("iam1"); break;
  case 2: printf("iam2"); break;
  default:
    printf("iami");
}
// 输出 -> "iam2"

2.10. 数组

数组用于在单个变量中存储多个值,而不是为每个值声明单独的变量。要创建一个数组,请定义数据类型(如int)并指定数组的名称,后跟方括号[]。

  • 更改数组元素:
int myNumbers[] = {25, 50, 75, 100};
myNumbers[0] = 33;

printf("%d", myNumbers[0]);
  • 循环遍历数组:
int myNumbers[] = {25, 50, 75, 100};
int i;

for (i = 0; i < 4; i++) {
  printf("%d\n", myNumbers[i]);
}
  • 设置数组大小:
// 声明一个由四个整数组成的数组:
int myNumbers[4];
// 添加元素
myNumbers[0] = 25;
myNumbers[1] = 50;
myNumbers[2] = 75;
myNumbers[3] = 100;

2.11. 枚举

C 中的枚举也称为枚举类型。它是一种用户定义的数据类型,由整数值组成,并为这些值提供有意义的名称。

  • 定义枚举变量:
enum week a, b, c;

enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a, b, c;
  • 枚举变量赋值:
enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
enum week a = Mon, b = Wed, c = Sat;
// 或者
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat;

示例:下面是一个简单的枚举示例应用,判断用户输入的是星期几。

#include <stdio.h>
int main(){
  enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;
  scanf("%d", &day);
  switch(day){
    case Mon:   puts("Monday"); break;
    case Tues:  puts("Tuesday"); break;
    case Wed:   puts("Wednesday"); break;
    case Thurs: puts("Thursday"); break;
    case Fri:   puts("Friday"); break;
    case Sat:   puts("Saturday"); break;
    case Sun:   puts("Sunday"); break;
    default:    puts("Error!");
  }
  return 0;
}

2.12. 用户输入

// 创建一个整数变量来存储我们从用户那里得到的数字
int myNum;

// 要求用户输入一个数字
printf("请输入一个数字: \n");

// 获取并保存用户输入的号码
scanf("%d", &myNum);

// 输出用户输入的数字
printf("您输入的数字: %d", myNum);

// 创建一个字符串
char firstName[30];

// 要求用户输入一些文本
printf("输入您的名字: \n");

// 获取并保存文本
scanf("%s", firstName);

// 输出文本
printf("Hello %s.", firstName);

三、运算符

运算符含义示例
+x + y
-x - y
*x * y
/x / y
%取模x % y
++增量(将变量的值加 1)++
--减量(将变量的值减 1)--x
&&与逻辑(如果两个语句都为真,则返回真)x < 5 && x < 10
||或逻辑(如果其中一个语句为真,则返回真)x < 5 || x < 4
!非逻辑(反转结果,如果结果为真则返回假)!(x < 5 && x < 10)
==等于x == y
!=不等于x != y
>大于x > y
<小于x < y
>=大于或等于x >= y
<=小于或等于x <= y
&按位与操作,按二进制位进行"与"运算(A & B) 将得到 12 即为 0000 1100
|按位或运算符,按二进制位进行"或"运算(A | B) 将得到 61 即为 0011 1101
^异或运算符,按二进制位进行"异或"运算(A ^ B) 将得到 49 即为 0011 0001
~取反运算符,按二进制位进行"取反"运算(~A) 将得到 -61 即为 1100 0011
<<二进制左移运算符A << 2 将得到 240 即为 1111 0000
>>二进制右移运算符A >> 2 将得到 15 即为 0000 1111

示例:

unsigned int a = 60; /* 60 = 0011 1100 */  
unsigned int b = 13; /* 13 = 0000 1101 */
int c = 0;           

c = a & b;      /* 12 = 0000 1100 */ 
printf("Line 1 - c 的值是 %d\n", c );

c = a | b;      /* 61 = 0011 1101 */
printf("Line 2 - c 的值是 %d\n", c );
c = a ^ b;      /* 49 = 0011 0001 */
printf("Line 3 - c 的值是 %d\n", c );
c = ~a;         /*-61 = 1100 0011 */
printf("Line 4 - c 的值是 %d\n", c );
c = a << 2;     /* 240 = 1111 0000 */
printf("Line 5 - c 的值是 %d\n", c );
c = a >> 2;     /* 15 = 0000 1111 */
printf("Line 6 - c 的值是 %d\n", c );

四、数据类型

数据类型描述
char字符型
short短整型
int整型
long长整型
float单精度浮点型
double双精度浮点型
void无类型
数据类型大小取值范围
char1 字节−128 ~ 127
signed char1 字节−128 ~ 127
unsigned char1 字节0 ~ 255
int2 到 4 字节−32,768 ~ 32,767
signed int2 字节−32,768 ~ 32,767
unsigned int2 字节0 ~ 65,535
short int2 字节−32,768 ~ 32,767
signed short int2 字节−32,768 ~ 32,767
unsigned short int2 字节0 ~ 65,535
long int4 字节-2,147,483,648 ~ 2,147,483,647
signed long int4 字节-2,147,483,648 ~ 2,147,483,647
unsigned long int4 字节0 ~ 4,294,967,295
float4 字节
double8 字节
long double10 字节
格式说明符数据类型
%d 或 %iint 整数
%ffloat 单精度的十进制类型
%lfdouble 高精度浮点数据或数字
%cchar 字符
%s用于 strings 字符串

五、预处理器

指令描述
#define定义宏
#include包含一个源代码文件
#undef取消已定义的宏
#ifdef如果宏已经定义,则返回真
#ifndef如果宏没有定义,则返回真
#if如果给定条件为真,则编译下面代码
#else#if 的替代方案
#elif如果 #if 条件为假,当前条件为真
#endif结束一个 #if……#else 条件编译块
#error当遇到标准错误时,输出错误消息
#pragma使用标准化方法,向编译器发布特殊的命令到编译器中

示例:

// 所有的 MAX_ARRAY_LENGTH 替换为 20
#define MAX_ARRAY_LENGTH 20
// 系统库中获取 stdio.h
#include <stdio.h>
// 本地目录中获取 myheader.h
#include "myheader.h"
#undef  FILE_SIZE
#define FILE_SIZE 42 // 取消已定义并定义为 42

六、函数

6.1. 函数声明和定义

void myFunction() { // 声明 declaration
  // 函数体(要执行的代码)(definition)
}
// 函数声明
void myFunction();
// 主要方法
int main() {
  myFunction(); // --> 调用函数
  return 0;
}
void myFunction() {// 函数定义
  printf("晚上好!");
}

6.2. 调用函数

// 创建函数
void myFunction() {
  printf("晚上好!");
}
int main() {
  myFunction();  // 调用函数
  myFunction();  // 可以被多次调用
  return 0;
}
// 输出 -> "晚上好!"
// 输出 -> "晚上好!"

6.3. 数学函数

#include <math.h>
printf("%f", sqrt(16));   // 平方根
printf("%f", ceil(1.4));  // 四舍五入 (入)
printf("%f", floor(1.4)); // 四舍五入 (舍)
printf("%f", pow(4, 3));  // x(4)的y(3)次方
  • abs(x) 绝对值
  • acos(x) 反余弦值
  • asin(x) 反正弦值
  • atan(x) 反正切
  • cbrt(x) 立方根
  • cos(x) 余弦
  • exp(x) Ex 的值
  • sin(x) x 的正弦值
  • tan(x) 角度的正切

七、文件处理

C 库中有许多函数可以打开/读取/写入/搜索和关闭文件。

7.1. 文件处理函数

函数描述
fopen()打开新文件或现有文件
fprintf()将数据写入文件
fscanf()从文件中读取数据
fputc()将一个字符写入文件
fgetc()从文件中读取一个字符
fclose()关闭文件
fseek()将文件指针设置到给定位置
fputw()将整数写入文件
fgetw()从文件中读取一个整数
ftell()返回当前位置
rewind()将文件指针设置为文件的开头

7.2. 打开模式参数

参数描述
r以读取模式打开一个文本文件,允许读取文件
w以写模式打开一个文本文件,允许写入文件
a以追加模式打开一个文本文件
如果文件不存在,则会创建一个新文件
r+以读写模式打开一个文本文件,允许读写文件
w+以读写模式打开一个文本文件,允许读写文件
a+以读写模式打开一个文本文件,允许读写文件
rb以读取模式打开二进制文件
wb以写入模式打开二进制文件
ab以追加模式打开二进制文件
rb+以读写模式打开二进制文件
wb+以读写模式打开二进制文件
ab+以读写模式打开二进制文件

7.3. 打开文件示例

对文件执行所有操作后,必须关闭 fclose() 该文件。

#include<stdio.h>

void main( ) {
  FILE *fp;
  char ch;
  fp = fopen("file_handle.c", "r");

  while (1) {
    ch = fgetc(fp);
    if (ch == EOF)
    break;
    printf("%c", ch);
  }
  fclose(fp);
}

7.4. 写入文件示例

#include <stdio.h>

main() {
  FILE *fp;
  fp = fopen("file.txt", "w"); // 打开文件
  // 将数据写入文件
  fprintf(fp, "fprintf 的 Hello 文件..\n");
  fclose(fp); // 关闭文件  
}  

7.5. 读取文件示例

#include <stdio.h>  
main(){
  FILE *fp;
  char buff[255]; // 创建char数组存储文件数据
  fp = fopen("file.txt", "r");
  while(fscanf(fp, "%s", buff)!=EOF) {
    printf("%s ", buff);
  }
  fclose(fp);
}

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

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

相关文章

基于单片机和LabVIEW的多路数据采集系统设计

摘 要:以8位高速、低功耗微控制器STC12C5A60S2为硬件控制核心,以Labview为上位机软件开发平台,设计了一个多路数据采集系统。由下位机单片机对多路模拟信号量进行数据采集,通过串口将采集的模拟量信息上传到上位机,上位机Labview对采集的数据进行存储、显示及处理、分析…

Node.js中如何处理异步编程

在Node.js中&#xff0c;处理异步编程是至关重要的技能。由于Node.js的单线程执行模型&#xff0c;异步编程可以极大地提高程序的性能和响应速度。本文将介绍几种常见的异步编程处理方式&#xff0c;并附上示例代码&#xff0c;帮助您更好地理解和应用异步编程技术。 回调函数…

GitLab代码库提交量统计工具

1.说明 统计公司所有项目的提交情况&#xff0c;可指定分支和时间段&#xff0c;返回每个人的提交新增数、删除数和总数。 2.API 文档地址&#xff1a;http://公司gitlab域名/help/api/README.md 项目列表查询 返回示例&#xff1a; [{"id": 1, //项目ID"http…

软考29-上午题-【数据结构】-排序

一、排序的基本概念 1-1、稳定性 稳定性指的是相同的数据所在的位置经过排序后是否发生变化。若是排序后&#xff0c;次序不变&#xff0c;则是稳定的。 1-2、归位 每一趟排序能确定一个元素的最终位置。 1-3、内部排序 排序记录全部存放在内存中进行排序的过程。 1-4、外部…

TF-A之供应链威胁模型分析

目录 一、简介 二、TF-A 概述 2.1、TF-A 存储库 2.2、外部依赖 2.3、附加二进制文件 2.4、TF-A工具链 2.5、基础设施 三、TF-A数据流 四、攻击树 五、威胁评估与缓解 5.1、影响和可能性评级 5.2、威胁和缓解措施 六、附录 一、简介 软件供应链攻击旨在向软件产品…

《深入浅出 Spring Boot 3.x》预计3月份发版

各位&#xff0c;目前本来新书《深入浅出 Spring Boot 3.x》已经到了最后编辑排版阶段&#xff0c;即将在3月份发布。 目录&#xff1a; 现在把目录截取给大家&#xff1a; 主要内容&#xff1a; 本书内容安排如下。 ● 第 1 章和第 2 章讲解 Spring Boot 和传统 Spri…

IT资讯——全速推进“AI+鸿蒙”战略布局!

文章目录 每日一句正能量前言坚持长期研发投入全速推进“AI鸿蒙”战略 人才战略新章落地持续加码核心技术生态建设 后记 每日一句正能量 人总要咽下一些委屈&#xff0c;然后一字不提的擦干眼泪往前走&#xff0c;没有人能像白纸一样没有故事&#xff0c;成长的代价就是失去原来…

【东京都立大学主办多重会议奖项】第六届计算机通信与互联网国际会议

ICCCI 2024 - Hosted by Tokyo Metropolitan University, Japanhttps://www.iccci.org/ 会议简介 第六届计算机通信与互联网国际会议将于2024年6月14-16日在日本东京都立大学举行。ICCCI 2024由东京都立大学主办&#xff0c;华中师范大学和美国科学工程学会联合赞助、并得到了…

Curfew e-Pass 管理系统存在Sql注入漏洞 附源代码

免责声明&#xff1a;本文所涉及的信息安全技术知识仅供参考和学习之用&#xff0c;并不构成任何明示或暗示的保证。读者在使用本文提供的信息时&#xff0c;应自行判断其适用性&#xff0c;并承担由此产生的一切风险和责任。本文作者对于读者基于本文内容所做出的任何行为或决…

使用备份工具xtrabackup进行增量备份详细讲解

增量备份 第一次修改数据 mysql> insert into tb_user values (4,sxx,0); Query OK, 1 row affected (0.01 sec)mysql> select * from tb_user; ------------------- | id | name | sex | ------------------- | 1 | Tom | 1 | | 2 | Trigger | 0 | | …

深入学习TS的高阶语法(泛型、类型检测、内置工具)

文章目录 概要一.TS的类型检测1.鸭子类型2.严格的字面量类型检测 二.TS的泛型1.基本使用2.传递多个参数3.泛型接口4.泛型类5.泛型约束6.映射类型&#xff08;了解&#xff09; 三.TS的知识扩展1.模块的使用-- 内置类型导入 2.类型的查找3.第三方库的类型导入4.declare 声明文件…

深度学习中的样本分类:如何区分正样本、负样本、困难样本和简单样本?

深度学习中的样本分类&#xff1a;如何区分正样本、负样本、困难样本和简单样本&#xff1f; &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入…

思维导图教你工作日报怎么写?

工作日报撰写秘诀&#xff1a;轻松提升效率&#xff0c;让你的每一天都闪闪发光 在快节奏的现代工作中&#xff0c;如何高效地规划和管理工作任务成为了职场人士必须面对的挑战。思维导图作为一种强大的思维工具&#xff0c;正逐渐受到越来越多人的青睐。本文将探讨为什么使用…

MySQL 索引原理以及 SQL 优化

索引 索引&#xff1a;一种有序的存储结构&#xff0c;按照单个或者多个列的值进行排序。索引的目的&#xff1a;提升搜索效率。索引分类&#xff1a; 数据结构 B 树索引&#xff08;映射的是磁盘数据&#xff09;hash 索引&#xff08;快速锁定内存数据&#xff09;全文索引 …

opencv的图像上下、左右和对角线翻转—flip函数

在OpenCV中&#xff0c;flip函数用于翻转图像。你可以沿x轴、y轴或两者同时翻转图像。这个函数非常直接&#xff0c;可以用于创建镜像图像或旋转图像。 void flip(InputArray src, OutputArray dst, int flipCode);src&#xff1a;输入图像。 dst&#xff1a;翻转后的输出图像…

安卓系统和iOS系统的手机备忘录同步数据方法

在这个智能手机时代&#xff0c;安卓与iOS系统犹如两位王者&#xff0c;各自拥有庞大的用户群体。有人钟情于安卓的开放与多样&#xff0c;有人偏爱iOS的流畅与稳定。甚至&#xff0c;有些人为了满足不同需求&#xff0c;同时使用着两个系统的手机。我就是其中的一员。 工作中…

ELK 简介安装

1、概念介绍 日志介绍 日志就是程序产生的&#xff0c;遵循一定格式&#xff08;通常包含时间戳&#xff09;的文本数据。 通常日志由服务器生成&#xff0c;输出到不同的文件中&#xff0c;一般会有系统日志、 应用日志、安全日志。这些日志分散地存储在不同的机器上。 日志…

RAW 编程接口 TCP 简介

一、LWIP 中 中 RAW API 编程接口中与 TCP 相关的函数 二、LWIP TCP RAW API 函数 三、LwIP_Periodic_Handle函数 LwIP_Periodic_Handle 函数是一个必须被无限循环调用的 LwIP支持函数&#xff0c;一般在 main函数的无限循环中调用&#xff0c;主要功能是为 LwIP各个模块提供…

LeetCode | 整数反转 C语言

Problem: 7. 整数反转 文章目录 思路解题方法Code结果 思路 运算部分 while(x > 0) {y x % 10;y * 10;x / 10; } y / 10;对于大于32位的数要用long int类型的变量保存用pow算-2的31次方和2的31次方-1。 解题方法 由思路得 Code int reverse(long int x){long int y …

bat 查找文件所在

脚本 在批处理文件&#xff08;.bat&#xff09;中查找文件所在的目录&#xff0c;你可以使用dir命令结合循环和条件语句来实现。以下是一个简单的示例&#xff0c;演示如何在批处理文件中查找指定文件并输出其所在目录&#xff1a; echo off setlocal enabledelayedexpansio…