《深入浅出C语言:从基础到指针的全面指南》

1. 简介

        C语言是一种通用的编程语言,广泛应用于系统编程、嵌入式系统和高性能应用程序。它由Dennis Ritchie在1972年开发,并且至今仍然非常流行。C语言以其高效、灵活和强大的功能著称,是许多现代编程语言的基础。

2. 基本语法

2.1 Hello, World!程序
#include <stdio.h>int main() {printf("Hello, World!\n");return 0;
}
  • #include <stdio.h>:包含标准输入输出库。
  • int main():程序的主函数。
  • printf:输出函数,用于打印字符串。
  • return 0:返回0表示程序成功结束。
2.2 注释

        C语言支持单行注释和多行注释:

// 这是单行注释
/*这是多行注释
*/

3. 数据类型和变量

3.1 基本数据类型

        C语言有以下几种基本数据类型:

  • 整型(int)
  • 浮点型(float, double)
  • 字符型(char)
int a = 10;
float b = 5.5;
char c = 'A';
3.2 变量声明和初始化

        变量声明和初始化可以在同一行完成:

int x = 5;
float y = 3.14;
char z = 'A';
3.3 常量

        使用const关键字定义常量:

const int MAX = 100;
数据类型描述
int整型
float浮点型
double双精度浮点型
char字符型
const常量

4. 运算符

4.1 算术运算符

        C语言支持以下算术运算符:

  • +:加法
  • -:减法
  • *:乘法
  • /:除法
  • %:取模
int a = 10, b = 3;
int sum = a + b;  // sum = 13
int diff = a - b; // diff = 7
int prod = a * b; // prod = 30
int quot = a / b; // quot = 3
int mod = a % b;  // mod = 1
4.2 关系运算符

        关系运算符用于比较两个值:

  • ==:等于
  • !=:不等于
  • >:大于
  • <:小于
  • >=:大于等于
  • <=:小于等于
int x = 5, y = 10;
int result = (x == y); // result = 0 (false)
result = (x != y);     // result = 1 (true)
result = (x > y);      // result = 0 (false)
result = (x < y);      // result = 1 (true)
4.3 逻辑运算符

        逻辑运算符用于组合多个条件:

  • &&:逻辑与
  • ||:逻辑或
  • !:逻辑非
int a = 1, b = 0;
int result = (a && b); // result = 0 (false)
result = (a || b);     // result = 1 (true)
result = !a;           // result = 0 (false)
4.4 赋值运算符

        赋值运算符用于给变量赋值:

  • =:赋值
  • +=:加后赋值
  • -=:减后赋值
  • *=:乘后赋值
  • /=:除后赋值
  • %=:模后赋值
int a = 10;
a += 5;  // a = 15
a -= 3;  // a = 12
a *= 2;  // a = 24
a /= 4;  // a = 6
a %= 4;  // a = 2
4.5 位运算符

        位运算符用于操作二进制位:

  • &:按位与
  • |:按位或
  • ^:按位异或
  • ~:按位取反
  • <<:左移
  • >>:右移
int a = 5, b = 3; // a = 0101, b = 0011
int result = a & b; // result = 0001 (1)
result = a | b;     // result = 0111 (7)
result = a ^ b;     // result = 0110 (6)
result = ~a;        // result = 11111111111111111111111111111010 (-6)
result = a << 1;    // result = 1010 (10)
result = a >> 1;    // result = 0010 (2)
4.6 其他运算符
  • ? ::三元运算符
int a = 10, b = 20;
int max = (a > b) ? a : b; // max = 20
运算符描述
+, -, *, /, %算术运算符
==, !=, >, <, >=, <=关系运算符
&&,
=, +=, -=, *=, /=, %=赋值运算符
&,, ^, ~, <<, >>
? :三元运算符
4.7 综合示例
#include <stdio.h>int main() {int a = 10, b = 20;int sum = a + b;int diff = a - b;int prod = a * b;int quot = a / b;int mod = a % b;if (a > b) {printf("a is greater than b\n");} else {printf("a is not greater than b\n");}int max = (a > b) ? a : b;printf("The maximum value is: %d\n", max);return 0;
}

5. 控制结构

5.1 条件语句
5.1.1 if语句
int x = 5;
if (x > 0) {printf("x is positive\n");
}
5.1.2 if-else语句
int x = -5;
if (x > 0) {printf("x is positive\n");
} else {printf("x is non-positive\n");
}
5.1.3 switch语句
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("Invalid day\n");
}
5.2 循环语句

        循环语句允许重复执行某段代码,直到满足特定条件。C语言支持三种主要的循环语句:for循环、while循环和do-while循环。

5.2.1 for循环

   for循环通常用于需要明确知道循环次数的场景。

for (int i = 0; i < 5; i++) {printf("i = %d\n", i);
}
  • 初始化:int i = 0,在循环开始前执行。
  • 条件:i < 5,在每次循环前检查,如果条件为真,则执行循环体。
  • 迭代:i++,在每次循环结束后执行。
5.2.2 while循环

   while循环在每次迭代前检查条件,如果条件为真,则执行循环体。

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

   do-while循环先执行循环体,然后再检查条件。如果条件为真,则继续循环。

int i = 0;
do {printf("i = %d\n", i);i++;
} while (i < 5);
循环类型描述
for适用于已知循环次数的情况
while适用于循环次数不确定,但需要在每次迭代前检查条件的情况
do-while适用于至少需要执行一次循环体的情况
5.3 跳转语句

        跳转语句用于改变程序的执行流程。C语言支持以下跳转语句:breakcontinuegoto

5.3.1 break

   break语句用于立即退出循环或switch语句。

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

   continue语句用于跳过当前迭代,继续下一次循环。

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

   goto语句用于无条件跳转到程序中的指定标签。应谨慎使用goto,因为它可能导致代码难以理解和维护。

int i = 0;
start:
printf("i = %d\n", i);
i++;
if (i < 5) {goto start;
}
跳转语句描述
break立即退出循环或switch语句
continue跳过当前迭代,继续下一次循环
goto无条件跳转到指定标签
5.4 综合示例
#include <stdio.h>int main() {// for 循环示例for (int i = 0; i < 5; i++) {printf("for loop: i = %d\n", i);}// while 循环示例int j = 0;while (j < 5) {printf("while loop: j = %d\n", j);j++;}// do-while 循环示例int k = 0;do {printf("do-while loop: k = %d\n", k);k++;} while (k < 5);// break 和 continue 示例for (int l = 0; l < 10; l++) {if (l == 5) {break; // 退出循环}if (l % 2 == 0) {continue; // 跳过当前迭代}printf("break and continue: l = %d\n", l);}return 0;
}

6. 函数

        函数是组织代码的一种方式,能够提高代码的重用性和可读性。C语言中的函数包括函数定义和函数声明。

6.1 函数的定义和声明

        函数定义包括函数的返回类型、函数名、参数列表和函数体。函数声明则是在函数使用前声明其类型和参数。

// 函数声明
int add(int x, int y);// 函数定义
int add(int x, int y) {return x + y;
}int main() {int result = add(3, 4);printf("Result: %d\n", result);return 0;
}
6.2 函数参数和返回值

        函数可以接受参数并返回值。参数在函数定义时指定,调用时传递。

int multiply(int a, int b) {return a * b;
}int main() {int result = multiply(5, 6);printf("Result: %d\n", result);return 0;
}
6.3 递归函数

        递归函数是指一个函数在其定义中调用自身。递归需要一个终止条件,否则会导致无限递归。

int factorial(int n) {if (n == 0) {return 1;}return n * factorial(n - 1);
}int main() {int result = factorial(5);printf("Factorial: %d\n", result);return 0;
}
6.4 函数指针

        函数指针是指向函数的指针,可以用来调用函数。

#include <stdio.h>int add(int a, int b) {return a + b;
}int main() {int (*func_ptr)(int, int) = add;int result = func_ptr(3, 4);printf("Result: %d\n", result);return 0;
}
函数类型描述
普通函数定义和声明函数,接受参数并返回值
递归函数在函数定义中调用自身
函数指针指向函数的指针,用于调用函数
6.5 综合示例
#include <stdio.h>// 函数声明
int add(int x, int y);
int multiply(int a, int b);
int factorial(int n);// 函数定义
int add(int x, int y) {return x + y;
}int multiply(int a, int b) {return a * b;
}int factorial(int n) {if (n == 0) {return 1;}return n * factorial(n - 1);
}int main() {int sum = add(3, 4);int product = multiply(5, 6);int fact = factorial(5);printf("Sum: %d\n", sum);printf("Product: %d\n", product);printf("Factorial: %d\n", fact);// 函数指针int (*func_ptr)(int, int) = add;int result = func_ptr(7, 8);printf("Function pointer result: %d\n", result);return 0;
}

7. 数组

        数组是存储相同类型数据的集合。C语言支持一维数组和多维数组。

7.1 一维数组

        一维数组是最简单的数组形式,用于存储一组相同类型的数据。

int arr[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {printf("arr[%d] = %d\n", i, arr[i]);
}
7.2 多维数组

        多维数组是数组的数组,可以用于存储更复杂的数据结构。

int matrix[2][3] = {{1, 2, 3},{4, 5, 6}
};for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);}
}
7.3 字符串(字符数组)

        字符串在C语言中表示为字符数组,以空字符\0结尾。

char str[] = "Hello, World!";
printf("%s\n", str);
7.4 数组与指针的关系

        数组名实际上是一个指向数组首元素的指针。

int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;  // 数组名即为数组首元素的地址
for (int i = 0; i < 5; i++) {printf("arr[%d] = %d, *(p + %d) = %d\n", i, arr[i], i, *(p + i));
}
数组类型描述
一维数组存储一组相同类型的数据
多维数组数组的数组,用于存储更复杂的数据结构
字符串字符数组,以空字符\0结尾
数组与指针数组名是指向数组首元素的指针
7.5 综合示例
#include <stdio.h>int main() {// 一维数组示例int arr[5] = {1, 2, 3, 4, 5};for (int i = 0; i < 5; i++) {printf("arr[%d] = %d\n", i, arr[i]);}// 多维数组示例int matrix[2][3] = {{1, 2, 3},{4, 5, 6}};for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);}}// 字符串示例char str[] = "Hello, World!";printf("%s\n", str);// 数组与指针的关系示例int *p = arr;  // 数组名即为数组首元素的地址for (int i = 0; i < 5; i++) {printf("arr[%d] = %d, *(p + %d) = %d\n", i, arr[i], i, *(p + i));}return 0;
}

8. 指针

        指针是C语言中非常重要的概念,用于存储变量的地址。指针的灵活性和强大功能使其在C语言编程中广泛应用。

8.1 指针的基本概念

        指针是一个变量,其值为另一个变量的地址。

int a = 10;
int *p = &a;  // p是一个指针,存储了变量a的地址
printf("a = %d, *p = %d\n", a, *p);  // *p表示指针p指向的变量的值
8.2 指针的声明和初始化

        指针的声明和初始化如下:

int a = 10;
int *p = &a;  // 声明一个指向int类型的指针,并初始化为变量a的地址
8.3 指针运算

        指针可以进行加减运算和比较运算。

  • 指针加减运算
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
p = p + 2;  // 指针指向第三个元素
printf("*p = %d\n", *p);  // 输出3
  • 指针比较运算
int *p1 = arr;
int *p2 = arr + 2;
if (p1 < p2) {printf("p1 points to an earlier element than p2\n");
}
8.4 指针与数组

指针和数组有着密切的关系,数组名实际上是一个指向数组首元素的指针。

int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;  // 数组名即为数组首元素的地址
for (int i = 0; i < 5; i++) {printf("arr[%d] = %d, *(p + %d) = %d\n", i, arr[i], i, *(p + i));
}
8.5 函数中的指针参数

指针可以作为函数参数传递,允许函数修改调用者的变量。

void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}int main() {int x = 10, y = 20;swap(&x, &y);printf("x = %d, y = %d\n", x, y);  // 输出x = 20, y = 10return 0;
}
8.6 指向指针的指针

指针不仅可以指向普通变量,还可以指向其他指针。

int a = 10;
int *p = &a;
int **pp = &p;  // pp是一个指向指针p的指针
printf("a = %d, *p = %d, **pp = %d\n", a, *p, **pp);
8.7 动态内存分配

C语言提供了一组函数用于动态分配和释放内存。

  • malloc:分配指定字节数的内存
  • calloc:分配指定数量的内存块,并初始化为零
  • realloc:重新分配内存
  • free:释放内存
#include <stdio.h>
#include <stdlib.h>int main() {// 使用malloc分配内存int *arr = (int *)malloc(5 * sizeof(int));if (arr == NULL) {printf("Memory allocation failed\n");return 1;}for (int i = 0; i < 5; i++) {arr[i] = i + 1;}for (int i = 0; i < 5; i++) {printf("arr[%d] = %d\n", i, arr[i]);}// 释放内存free(arr);return 0;
}
指针类型描述
普通指针存储变量的地址
指向指针的指针存储指针的地址
动态内存分配使用malloccallocreallocfree进行内
8.8 综合示例
#include <stdio.h>
#include <stdlib.h>// 函数声明
void swap(int *a, int *b);int main() {// 指针基本操作int a = 10;int *p = &a;printf("a = %d, *p = %d\n", a, *p);// 指针运算int arr[5] = {1, 2, 3, 4, 5};p = arr;for (int i = 0; i < 5; i++) {printf("arr[%d] = %d, *(p + %d) = %d\n", i, arr[i], i, *(p + i));}// 函数中的指针参数int x = 10, y = 20;swap(&x, &y);printf("x = %d, y = %d\n", x, y);// 指向指针的指针int **pp = &p;printf("a = %d, *p = %d, **pp = %d\n", a, *p, **pp);// 动态内存分配int *dynamicArr = (int *)malloc(5 * sizeof(int));if (dynamicArr == NULL) {printf("Memory allocation failed\n");return 1;}for (int i = 0; i < 5; i++) {dynamicArr[i] = i + 1;}for (int i = 0; i < 5; i++) {printf("dynamicArr[%d] = %d\n", i, dynamicArr[i]);}free(dynamicArr);return 0;
}void swap(int *a, int *b) {int temp = *a;*a = *b;*b = temp;
}

结论

        本文详细介绍了C语言的基础知识,从基本语法、变量、控制结构、函数、数组一直到指针。通过代码示例和表格总结,帮助你更好地理解各个知识点。希望这些内容能够为你打下坚实的基础,进一步深入学习C语言。

综合示例

#include <stdio.h>
#include <stdlib.h>// 函数声明
// add 函数用于返回两个整数的和
int add(int x, int y);// swap 函数用于交换两个整数的值
void swap(int *a, int *b);// factorial 函数用于计算一个整数的阶乘
int factorial(int n);// printArray 函数用于打印数组的内容
void printArray(int *arr, int size);// initializeMatrix 函数用于初始化一个2x3的矩阵
void initializeMatrix(int matrix[2][3]);int main() {// 基本数据类型和变量int a = 10;          // 整型变量float b = 5.5;       // 浮点型变量char c = 'A';        // 字符型变量const int MAX = 100; // 常量,值不可改变// 算术运算符和关系运算符的使用int sum = add(a, 5); // 调用 add 函数计算 a 和 5 的和if (sum > MAX) {     // 使用关系运算符比较 sum 和 MAXprintf("Sum is greater than MAX\n");} else {printf("Sum is less than or equal to MAX\n");}// 逻辑运算符if (a > 0 && b > 0) { // 使用逻辑运算符检查 a 和 b 是否都为正数printf("a and b are positive\n");}// 控制结构// 条件语句if (a > 0) {                   // if 语句检查条件是否为真printf("a is positive\n");} else if (a == 0) {           // else if 语句检查另一个条件printf("a is zero\n");} else {                       // else 语句处理所有其他情况printf("a is negative\n");}// switch 语句switch (c) {                   // 根据变量 c 的值执行相应的 case 语句case 'A':printf("Character is A\n");break;                 // break 语句用于退出 switch 语句case 'B':printf("Character is B\n");break;default:                   // default 语句处理所有未匹配的情况printf("Character is not A or B\n");}// 循环语句// for 循环for (int i = 0; i < 5; i++) {  // for 循环用于重复执行代码块,直到条件为假printf("for loop: i = %d\n", i);}// while 循环int j = 0;while (j < 5) {                // while 循环在每次迭代前检查条件printf("while loop: j = %d\n", j);j++;}// do-while 循环int k = 0;do {                           // do-while 循环先执行代码块,然后检查条件printf("do-while loop: k = %d\n", k);k++;} while (k < 5);// 跳转语句for (int l = 0; l < 10; l++) {if (l == 5) {break; // 退出循环}if (l % 2 == 0) {continue; // 跳过当前迭代}printf("break and continue: l = %d\n", l);}// 数组和指针int arr[5] = {1, 2, 3, 4, 5};  // 定义一个包含5个整数的一维数组printArray(arr, 5);            // 调用 printArray 函数打印数组内容// 函数中的指针参数int x = 10, y = 20;swap(&x, &y);                  // 调用 swap 函数交换 x 和 y 的值printf("After swap: x = %d, y = %d\n", x, y);// 递归函数int fact = factorial(5);       // 调用 factorial 函数计算 5 的阶乘printf("Factorial of 5: %d\n", fact);// 多维数组int matrix[2][3];              // 定义一个2x3的二维数组initializeMatrix(matrix);      // 调用 initializeMatrix 函数初始化矩阵for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);}}// 字符串char str[] = "Hello, World!";  // 定义一个字符串(字符数组)printf("%s\n", str);// 动态内存分配int *dynamicArr = (int *)malloc(5 * sizeof(int)); // 使用 malloc 分配内存if (dynamicArr == NULL) {       // 检查内存分配是否成功printf("Memory allocation failed\n");return 1;}for (int i = 0; i < 5; i++) {dynamicArr[i] = i + 1;      // 初始化动态数组}printArray(dynamicArr, 5);      // 打印动态数组内容free(dynamicArr);               // 释放动态分配的内存return 0;
}// 函数定义
int add(int x, int y) {// 返回两个整数的和return x + y;
}void swap(int *a, int *b) {// 交换两个整数的值int temp = *a;*a = *b;*b = temp;
}int factorial(int n) {// 递归计算整数 n 的阶乘if (n == 0) {return 1;}return n * factorial(n - 1);
}void printArray(int *arr, int size) {// 打印数组的内容for (int i = 0; i < size; i++) {printf("arr[%d] = %d\n", i, arr[i]);}
}void initializeMatrix(int matrix[2][3]) {// 初始化一个2x3的矩阵for (int i = 0; i < 2; i++) {for (int j = 0; j < 3; j++) {matrix[i][j] = i * 3 + j + 1; // 按顺序赋值}}
}

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

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

相关文章

VIKOR方法

简介 VIKOR方法是一种多标准决策&#xff08;MCDM&#xff09;或多标准决策分析方法。它最初由 Serafim Opricovic 开发&#xff0c;用于解决具有冲突和不可通约&#xff08;不同单位&#xff09;标准的决策问题&#xff0c;假设冲突解决可以接受妥协&#xff0c;决策者想要一…

C++中static关键字用法总结

在C中&#xff0c;关键字static有多种用途&#xff0c;它可以用于变量、函数。下面是static在不同上下文中的作用和举例。下面从static修饰的变量、函数三方面进行总结。 1、静态变量 静态变量分为全局变量、局部变量、函数中变量两种。 1.1 静态全局变量 静态全局变量声明在…

前端框架前置知识之Node.js:Node.js入门

前端程序员有必要学 Node.js 吗&#xff1f;要学到什么程度&#xff1f; 小朋友&#xff0c;你是否有很多问号&#xff1f; 对于node.js&#xff0c;不知道你是否和我一样有很多问号&#xff1f; 其实在学习node.js之前&#xff0c;我已经学完了Vue框架&#xff0c;而且已经…

排序算法(C++)

参考C算法&#xff0c;这里面有些写法也值得商榷。 1. 冒泡排序算法 冒泡排序算法代码和思路比较简单&#xff0c;大家如果在面试时被要求实现排序时&#xff0c;可以用这种方法来实现。 该算法里&#xff0c;会统一地遍历待排序的数据&#xff0c;每次比较两个相邻的数据&a…

变现 5w+,一个被严重低估的 AI 蓝海赛道,居然用这个免费的AI绘画工具就能做!

大家好&#xff0c;我是画画的小强&#xff0c;致力于分享各类的 AI 工具&#xff0c;包括 AI 绘画工具、AI 视频工具、AI 写作工具等等。 但单纯地为了学而学&#xff0c;是没有任何意义的。 这些 AI 工具&#xff0c;学会了&#xff0c;用起来&#xff0c;才能发挥出他们的…

深入探讨ChatGPT API中的Tokens计算方式和计算库

引言 在现代人工智能应用中&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术无疑是最受关注的领域之一。OpenAI推出的ChatGPT&#xff0c;作为一种先进的对话模型&#xff0c;已经在多个领域展示了其强大的语言生成能力。为了更好地使用ChatGPT API&#xff0c;理解其…

Amazon云计算AWS(二)

目录 三、简单存储服务S3&#xff08;一&#xff09;S3的基本概念和操作&#xff08;二&#xff09;S3的数据一致性模型&#xff08;三&#xff09;S3的安全措施 四、非关系型数据库服务SimpleDB和DynamoDB&#xff08;一&#xff09;非关系型数据库与传统关系数据库的比较&…

短剧出海的优势分析

海外短剧作为一种新兴的内容形式&#xff0c;正以其独特的魅力迅速占领市场&#xff0c;为企业带来了前所未有的商业机遇。本文将深入探讨短剧出海的优势&#xff0c;并为企业和老板们提供实用的操作指南。短剧出海是一个包含多个步骤的复杂过程&#xff0c;短剧出海需要综合考…

山景BP1048固件加密

1.在电脑的USB口插入山景公司的加密狗。 2.打开MVAssistant_BP10xx_V1.8.15(2022.04.19)软件 3.选择芯片型号。 4.选择M4模式 5.code数据选择编译好的固件&#xff0c;const数据选择编译好的提示音 6.输入加密密码 7.点击代码加密 8.导出MVA文件

强化学习 (三) 动态规划

文章目录 迭代法网友认为的迭代策略评估与价值迭代的区别 迭代策略评估的进一步解释附录 传统dp作用有限&#xff1a; 需要完备的环境模型计算的复杂度极高 其它方法都是对dp的近似&#xff0c;近似的出发点是解决上面两个问题。 有一种说法是&#xff0c;强化学习其实就是拟…

PS系统教程09

修复照片 修饰工具 污点修复画笔工具&#xff08;J&#xff09; 主要作用&#xff1a;去除一些污点或者不需要的 【&#xff1a;缩小】&#xff1a;放大 目标&#xff1a;去掉这两个点 修复画笔工具 也就是说我们要有取样点 选择修复画笔工具按住Alt键吸取周边相近颜色松开单机…

导航时间与坐标转换

前言&#xff1a; 该章节代码均在Gitee中开源&#xff1a;因为这章是学校作业&#xff0c;所以稍微正经点. 时空位置转换https://gitee.com/Ehundred/navigation-engineering/tree/master/%E5%8D%AB%E6%98%9F%E5%AF%BC%E8%88%AA%E5%8E%9F%E7%90%86/%E5%AF%BC%E8%88%AA%E6%97…

tmux工具使用鼠标滚动窗口及分屏命令

tmux工具使用鼠标滚动窗口及分屏命令 1. tmux source配置文件 长期生效2. 临时生效3. 实现分屏 1. tmux source配置文件 长期生效 vim ~/.tmux.conf echo "set -g mouse on" > ~/.tmux.conf tmux source-file ~/.tmux.conf2. 临时生效 1. 进入到tmux命令窗口 2.…

必看!硬核科普!什么是冻干?可以当主食喂的猫咪冻干分享

冻干猫粮作为近年来备受推崇的高品质选择&#xff0c;吸引了越来越多养猫人的目光。有着丰富养猫经验的我&#xff0c;早已开始采用冻干喂养。新手养猫的人可能会对冻干猫粮感到陌生&#xff0c;并产生疑问&#xff1a;这到底是什么&#xff1f;猫咪冻干可以天天喂吗&#xff1…

如何在自己的电脑上添加静态路由

1.任务栏搜索powershell 选择以管理员身份运行 2.输入 route add -p (永久) 目的网络地址例如192.168.10.0 mask 255.255.255.0&#xff08;子网掩码&#xff09;192.168.20.1&#xff08;下一跳地址&#xff09;。回车即可生效

LeetCode刷题 | Day 1 最大子序列求和(Largest K Subsequence Sum)

LeetCode刷题 | Day 1 最大子序列求和(Largest K Subsequence Sum) 文章目录 LeetCode刷题 | Day 1 最大子序列求和(Largest K Subsequence Sum)前言一、题目概述二、解题方法2.1 贪心思路2.1.1 思路讲解2.1.2 伪代码 + 逐步输出示例2.1.3 Python代码如下2.1.4 C++代码如下…

用WebStorm和VS Code断点调试Vue

大家好&#xff0c;我是咕噜铁蛋&#xff01;。今天&#xff0c;我想和大家分享一下如何在WebStorm和VS Code这两款流行的开发工具中&#xff0c;使用断点调试Vue.js项目。Vue.js作为前端三大框架之一&#xff0c;以其轻量级和组件化的特性&#xff0c;受到了广大开发者的喜爱。…

客观评价一下GPT-4o

评价GPT-4o&#xff08;即OpenAI发布的升级版语言模型&#xff09;&#xff0c;以下是上大学网&#xff08;www.sdaxue.com&#xff09;从技术能力与创新性、性能与效率、功能实用性与用户体验等几个维度进行评价&#xff0c;不周之出&#xff0c;请大家指正。 技术能力与创新性…

PTA字符串str1在第i个位置插入字符串str2

字符串str1在第i个位置插入字符串str2&#xff0c;如在字符串1234567890第2位插入ABC。 输入格式: 1234567890 ABC 2 输出格式: 12ABC34567890 #include<stdio.h> #include<string.h> int main() {char s1[100],s2[100];int w;scanf("%s%s%d",s1,s2,…

专业FBA海运货代是什么?为什么用FBA?

一、专业FBA海运货代概述 专业FBA海运货代是专门为卖家提供海运货物进入亚马逊仓库服务的一种行业。FBA&#xff0c;全称Fulfilled by Amazon&#xff0c;即亚马逊代发货服务&#xff0c;是亚马逊为卖家提供的一种物流服务。卖家将货物发往亚马逊并寄存在其仓库&#xff0c;商…