C語言快速回顧(一)

前言

在Android音視頻開發中,網上知識點過于零碎,自學起來難度非常大,不過音視頻大牛Jhuster提出了《Android 音視頻從入門到提高 - 任務列表》,結合我自己的工作學習經歷,我準備寫一個音視頻系列blog。C/C++是音視頻必備編程語言,我準備用幾篇文章來快速回顧C語言。本文是音視頻系列blog的其中一個, 對應的要學習的內容是:快速回顧C語言的變量和賦值,printf函數和scanf函數,判斷語句,循環語句,基本數據類型,數組,函數。


音視頻系列blog

音視頻系列blog: 點擊此處跳轉查看.


目錄

在這里插入圖片描述


1 C語言第一個程序

第一個程序肯定是輸出“Hello World”,程序中永恒的經典!!!

在C語言中,要輸出 “Hello World”,可以使用標準庫函數 printf。以下是一個簡單的示例代碼:

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

運行之后,可以看到輸出的 “Hello World”。


2 變量和賦值

2.1 變量

在C語言中,變量是一種用于存儲數據值的命名位置。每個變量都有一個特定的數據類型,如整數、字符、浮點數等,以確定變量可以存儲的數據類型和所占用的內存大小。變量在程序中用于存儲、操作和處理數據。

以下是關于C語言變量的一些重要信息:

  1. 變量聲明: 在使用變量之前,需要聲明變量的名稱和數據類型。變量聲明的一般格式是:數據類型 變量名;,例如:int age; 表示聲明了一個名為"age"的整數型變量。
  2. 變量賦值: 在聲明變量后,可以通過賦值操作將值存儲到變量中。例如:age = 25; 表示將整數值25存儲在變量"age"中。
  3. 變量初始化: 變量聲明的同時也可以進行初始化,即在聲明變量時賦予初始值。例如:int score = 100; 表示聲明一個名為"score"的整數型變量,并將初始值設為100。
  4. 變量命名規則: C語言變量的命名必須遵循一定的規則,如變量名只能由字母、數字和下劃線組成,不能以數字開頭,區分大小寫等。
  5. 數據類型: C語言提供了多種數據類型,包括基本數據類型(如整數、浮點數、字符)以及派生數據類型(如數組、結構體、指針)。不同數據類型具有不同的取值范圍和所占內存大小。
  6. 作用域: 變量的作用域指的是變量在程序中可見的范圍。C語言中有局部變量和全局變量兩種,局部變量只在特定代碼塊內可見,而全局變量在整個程序中都可見。
  7. const關鍵字: 使用const關鍵字可以聲明一個常量,即一個不可更改的變量。常量的值在程序運行過程中不能被修改。
  8. sizeof運算符: sizeof運算符用于獲取變量或數據類型所占用的字節數。例如:int size = sizeof(int); 表示獲取整數類型所占的字節數并存儲在變量"size"中。

以下是一些示例:

#include <stdio.h>int main() {int age;           // 聲明一個整數型變量age = 25;          // 賦值操作int score = 100;   // 聲明并初始化一個整數型變量const double pi = 3.14159;  // 聲明一個常量printf("Age: %d\n", age);printf("Score: %d\n", score);printf("Pi: %f\n", pi);return 0;
}

以上代碼演示了變量的聲明、賦值、初始化以及常量的使用。


2.2 賦值

在C語言中,賦值是將一個值存儲到變量中的過程。賦值操作使用賦值運算符(=)來完成。賦值運算符將右側的值賦給左側的變量。

以下是賦值操作的基本語法:

variable = expression;

其中,variable 是要接收賦值的變量,而 expression 是要賦給變量的值或表達式。

例如:

int x;         // 聲明一個整數型變量
x = 10;        // 將值10賦給變量xdouble pi = 3.14159;  // 聲明并初始化一個雙精度浮點型變量

你還可以在賦值操作中使用表達式,如:

int a = 5;
int b = 3;
int c = a + b; // 將a加b的結果賦給變量c

需要注意的是,賦值運算是從右向左進行的。即右邊的表達式會被計算,然后將計算結果賦給左邊的變量。

此外,C語言還支持復合賦值運算符,這些運算符將運算符與賦值操作結合起來,以簡化代碼。例如:

int num = 10;
num += 5;  // 等同于 num = num + 5;
num *= 2;  // 等同于 num = num * 2;

這些復合賦值運算符可以將操作和賦值合并到一個語句中。

賦值是C語言中重要的操作之一,允許你將值存儲在變量中,以便在程序中進行操作和處理。


3 printf函數和scanf函數

3.1 printf函數

printf 是C語言中用于輸出信息到標準輸出(通常是終端或命令行窗口)的函數。它是C標準庫中的一個函數,用于在屏幕上顯示文本或變量的值。

以下是 printf 函數的基本語法:

#include <stdio.h>  // 包含頭文件以使用printf函數int main() {printf("Hello, world!\n");  // 輸出字符串并換行return 0;
}

在上述示例中,printf 函數輸出了字符串 "Hello, world!",并且使用 \n 進行換行。

printf 函數中可以使用格式控制符來指定輸出的格式。一些常見的格式控制符包括:

  • %d:用于輸出整數。
  • %f:用于輸出浮點數。
  • %c:用于輸出字符。
  • %s:用于輸出字符串。
  • %x:用于輸出十六進制整數。

以下是一個使用格式控制符的示例:

#include <stdio.h>int main() {int age = 25;float height = 175.5;char grade = 'A';char name[] = "John";printf("Age: %d\n", age);printf("Height: %.2f\n", height);  // 輸出浮點數并控制小數點后的位數printf("Grade: %c\n", grade);printf("Name: %s\n", name);return 0;
}

在這個示例中,%d%.2f%c%s 是格式控制符,它們會被 printf 函數替換為相應的變量的值。

注意,格式控制符可以帶有附加信息,如 .2%f 后面表示要輸出的浮點數保留兩位小數。

printf 函數是C語言中用于輸出內容的重要工具,可以幫助你在屏幕上顯示文本、變量值以及格式化信息。


3.2 scanf函數

scanf 是C語言中用于從標準輸入(通常是鍵盤)獲取輸入數據并存儲到變量中的函數。它是C標準庫中的一個函數,用于讀取用戶輸入的數據。

以下是 scanf 函數的基本語法:

#include <stdio.h>  // 包含頭文件以使用scanf函數int main() {int num;printf("Enter a number: ");scanf("%d", &num);  // 從用戶輸入讀取整數,并將值存儲到num變量中printf("You entered: %d\n", num);return 0;
}

在上述示例中,scanf 函數等待用戶輸入一個整數,并使用 %d 格式控制符將輸入的值存儲到變量 num 中。需要注意的是,scanf 函數的參數中變量前面需要加上 & 符號,表示取該變量的地址。

如果你想獲取多個輸入,可以在 scanf 函數中使用多個格式控制符,如:

#include <stdio.h>int main() {int age;float height;printf("Enter your age: ");scanf("%d", &age);printf("Enter your height (in cm): ");scanf("%f", &height);printf("Age: %d, Height: %.2f\n", age, height);return 0;
}

在輸入多個值時,需要確保輸入的數據類型與格式控制符相匹配,否則可能會導致錯誤或意外行為。

需要注意的是,scanf 函數對輸入數據的處理可能會有一些限制和安全性問題,例如,它對錯誤的輸入處理不佳。在實際應用中,可能需要添加額外的輸入驗證來確保輸入的數據有效和合理。

scanf 函數是C語言中用于獲取用戶輸入的函數,可以幫助你從標準輸入讀取數據并存儲到變量中。


4 if else語句和switch語句

4.1 if else語句

ifelse 是C語言中用于控制程序流程的條件語句。它們允許你根據條件的真假來執行不同的代碼塊。

以下是 ifelse 語句的基本語法:

if (condition) {// 如果條件為真,執行這里的代碼塊
} else {// 如果條件為假,執行這里的代碼塊
}

在上述語法中,condition 是一個表達式,它的值會被判斷為真(非零)或假(零)。如果 condition 為真,那么 if 代碼塊中的代碼將被執行。如果 condition 為假,那么 else 代碼塊中的代碼將被執行。

以下是一個簡單的例子:

#include <stdio.h>int main() {int num = 10;if (num > 0) {printf("The number is positive.\n");} else {printf("The number is non-positive.\n");}return 0;
}

在這個例子中,如果變量 num 的值大于0,那么會輸出 “The number is positive.”,否則會輸出 “The number is non-positive.”。

你也可以使用多個 ifelse if 來構建更復雜的條件判斷結構:

#include <stdio.h>int main() {int score;printf("Enter your score: ");scanf("%d", &score);if (score >= 90) {printf("Grade: A\n");} else if (score >= 80) {printf("Grade: B\n");} else if (score >= 70) {printf("Grade: C\n");} else if (score >= 60) {printf("Grade: D\n");} else {printf("Grade: F\n");}return 0;
}

在這個例子中,根據輸入的分數,程序會輸出對應的等級。

ifelse 語句是構建條件邏輯的基礎,它們使你可以根據不同的條件執行不同的代碼塊,從而實現更靈活和有針對性的程序行為。


4.2 switch語句

switch 語句是C語言中用于根據不同的條件值執行不同代碼塊的一種選擇結構。它適用于當你有多個固定的選項需要進行選擇時,可以將多個條件分支進行組織,使代碼更清晰、簡潔。

以下是 switch 語句的基本語法:

switch (expression) {case constant1:// 執行代碼塊1break;case constant2:// 執行代碼塊2break;// 更多 case 分支default:// 執行默認代碼塊(可選)
}

在上述語法中,expression 是一個表達式,而 constant1constant2 等是常量或常量表達式。switch 語句會根據 expression 的值進行匹配,然后根據匹配到的常量執行對應的代碼塊。如果沒有匹配到任何常量,可以使用 default 分支。

以下是一個簡單的例子:

#include <stdio.h>int main() {char operator;double num1, num2;printf("Enter an operator (+, -, *, /): ");scanf("%c", &operator);printf("Enter two numbers: ");scanf("%lf %lf", &num1, &num2);switch (operator) {case '+':printf("%.2lf + %.2lf = %.2lf\n", num1, num2, num1 + num2);break;case '-':printf("%.2lf - %.2lf = %.2lf\n", num1, num2, num1 - num2);break;case '*':printf("%.2lf * %.2lf = %.2lf\n", num1, num2, num1 * num2);break;case '/':if (num2 != 0) {printf("%.2lf / %.2lf = %.2lf\n", num1, num2, num1 / num2);} else {printf("Cannot divide by zero.\n");}break;default:printf("Invalid operator.\n");}return 0;
}

在這個例子中,根據用戶輸入的操作符,程序使用 switch 語句來選擇不同的操作。

需要注意的是,在每個 case 分支的末尾要使用 break 關鍵字,以防止代碼繼續執行其他分支。如果沒有 break,程序會繼續執行后續的分支代碼。


5 while語句、do語句和 for語句

5.1 while語句

while 是C語言中用于創建循環的一種迭代語句。它允許你根據條件的真假重復執行一段代碼塊,直到條件不再滿足為止。

以下是 while 循環的基本語法:

while (condition) {// 循環體,如果條件為真則執行
}

在上述語法中,condition 是一個表達式,如果其值為真(非零),則會重復執行循環體中的代碼。當 condition 的值為假(零),循環會終止,程序將繼續執行循環后的代碼。

以下是一個簡單的例子:

#include <stdio.h>int main() {int count = 1;while (count <= 5) {printf("Count: %d\n", count);count++;}return 0;
}

在這個例子中,count 從 1 開始遞增,當 count 小于等于 5 時,循環會一直重復執行輸出 Count 的值,并遞增 count 直到達到 6。需要注意的是,如果 condition 一開始就為假,while 循環的代碼塊可能永遠不會被執行。

你可以使用 while 循環來處理不確定次數的迭代,只要條件滿足,循環會一直運行。為了防止無限循環,確保在循環體內改變循環條件或者使用適當的控制語句來終止循環。


5.2 do語句

當使用 dowhile 語句時,循環體中的代碼會至少被執行一次,然后在循環結束時檢查循環條件。這使得 dowhile 循環在一些特定場景下非常有用,例如需要至少執行一次某個操作,然后根據條件判斷是否繼續執行。

以下是一個示例,展示了如何使用 dowhile 循環來獲取用戶輸入并驗證輸入的有效性:

#include <stdio.h>int main() {int number;do {printf("Enter a positive number: ");scanf("%d", &number);if (number <= 0) {printf("Invalid input. Please enter a positive number.\n");}} while (number <= 0);printf("You entered a positive number: %d\n", number);return 0;
}

在這個例子中,循環體首先要求用戶輸入一個數字,然后檢查該數字是否為正數。如果輸入的數字不是正數,循環會繼續執行,要求用戶重新輸入,直到輸入的數字是正數為止。

需要注意的是,dowhile 循環在判斷循環條件之前至少會執行一次循環體中的代碼。這與其他循環結構(如 while 循環)不同,其他循環結構會在判斷循環條件之前檢查是否要執行循環體。

dowhile 循環在需要至少執行一次循環體的情況下很有用,可以保證在檢查循環條件之前,循環體內的代碼至少會被執行一次。


5.3 for語句

for 是C語言中用于創建循環的一種迭代語句,它提供了一種簡潔的方式來控制循環的初始化、條件和遞增。

以下是 for 循環的基本語法:

for (initialization; condition; increment) {// 循環體
}

在上述語法中,initialization 是循環初始化的表達式,它在循環開始之前被執行一次。condition 是循環的條件表達式,如果條件為真(非零),則循環體會被執行。increment 是循環遞增表達式,它在每次循環迭代結束后被執行。

以下是一個簡單的例子:

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

在這個例子中,for 循環從 i 初始化為 1 開始,然后在 i 小于等于 5 的條件下重復執行循環體。在每次循環迭代結束后,i 會遞增一次。

你可以根據需要在 initializationconditionincrement 部分編寫相應的表達式,以控制循環的行為。例如,你可以創建從任意起始值到任意結束值的循環,也可以使用負值或浮點數作為循環控制。

以下是一個計算階乘的例子,使用 for 循環:

#include <stdio.h>int main() {int n;int factorial = 1;printf("Enter a positive integer: ");scanf("%d", &n);for (int i = 1; i <= n; i++) {factorial *= i;}printf("Factorial of %d: %d\n", n, factorial);return 0;
}

在這個例子中,for 循環用于計算給定正整數的階乘。循環從 1 到輸入的整數 n 進行迭代,并將每次迭代的值乘到 factorial 中。

for 循環是C語言中用于控制循環的一種強大方式,它提供了初始化、條件和遞增的結構,使得循環邏輯更加緊湊。


6 基本數據類型

C語言中的基本數據類型用于存儲不同種類的數據,如整數、浮點數、字符等。這些基本數據類型可以用于聲明變量、函數參數和返回值等。

以下是C語言中常見的基本數據類型:

  1. 整數類型:
    • int:整數類型,通常占用4個字節(32位)的內存。
    • short:短整數類型,通常占用2個字節(16位)的內存。
    • long:長整數類型,占用4個字節或8個字節的內存,具體取決于編譯器和操作系統。
    • long long:更長的整數類型,通常占用8個字節的內存。
  2. 無符號整數類型:
    • unsigned int:無符號整數類型,存儲非負整數。
    • unsigned short:無符號短整數類型。
    • unsigned long:無符號長整數類型。
    • unsigned long long:無符號更長的整數類型。
  3. 字符類型:
    • char:字符類型,通常占用1個字節的內存,用于存儲ASCII碼中的字符。
  4. 浮點數類型:
    • float:單精度浮點數類型,通常占用4個字節的內存,用于存儲小數。
    • double:雙精度浮點數類型,通常占用8個字節的內存,提供更高的精度。
  5. 布爾類型:
    • bool(需要包含 <stdbool.h> 頭文件):布爾類型,存儲 truefalse 值。

C語言的標準庫還定義了一些用于表示內存大小和數據范圍的宏,如 sizeof 運算符用于獲取數據類型的字節數,INT_MAXINT_MIN 分別表示 int 類型的最大和最小值等。

例如,以下代碼演示了如何聲明不同的基本數據類型的變量和使用一些宏:

#include <stdio.h>
#include <limits.h>   // 包含一些整數類型的范圍宏int main() {int myInt = 42;char myChar = 'A';float myFloat = 3.14;double myDouble = 2.71828;bool myBool = true;printf("Size of int: %lu bytes\n", sizeof(int));printf("Size of char: %lu bytes\n", sizeof(char));printf("Size of float: %lu bytes\n", sizeof(float));printf("Size of double: %lu bytes\n", sizeof(double));printf("Size of bool: %lu byte\n", sizeof(bool));printf("Maximum value of int: %d\n", INT_MAX);printf("Minimum value of int: %d\n", INT_MIN);return 0;
}

在上述示例中,我們展示了不同數據類型的聲明、sizeof 運算符的使用以及一些整數范圍的宏。


7 數組

7.1 一維數組

在C語言中,一維數組是一種用于存儲相同數據類型元素的線性數據結構。數組允許你在一個變量中存儲多個相同類型的值,并通過索引訪問這些值。數組的索引從0開始,逐漸遞增。

以下是一維數組的基本語法:

data_type array_name[array_size];

在上述語法中,data_type 是數組中元素的數據類型,array_name 是數組的名稱,array_size 是數組的大小,即可以存儲的元素個數。

以下是一個示例,展示如何聲明、初始化和訪問一維數組:

#include <stdio.h>int main() {int numbers[5];  // 聲明一個包含5個整數的數組// 初始化數組numbers[0] = 10;numbers[1] = 20;numbers[2] = 30;numbers[3] = 40;numbers[4] = 50;// 訪問和輸出數組元素printf("Element at index 0: %d\n", numbers[0]);printf("Element at index 1: %d\n", numbers[1]);printf("Element at index 2: %d\n", numbers[2]);printf("Element at index 3: %d\n", numbers[3]);printf("Element at index 4: %d\n", numbers[4]);return 0;
}

在這個示例中,我們聲明了一個名為 numbers 的整數數組,然后初始化數組的各個元素,最后通過索引訪問并輸出了數組中的元素。

你也可以在聲明數組時同時進行初始化:

int numbers[5] = {10, 20, 30, 40, 50};

如果不顯式提供初始化值,數組的元素將會被自動初始化為0(對于數字類型)或者空字符 '\0'(對于字符類型)。

一維數組在C語言中是非常常用的數據結構,用于存儲列表、序列和集合等數據。數組的索引從0開始,注意在訪問數組元素時,索引不能超出數組的范圍,否則可能導致未定義的行為。


7.2 二維數組

二維數組是C語言中的一種數據結構,用于存儲表格形式的數據,即具有行和列的數據。二維數組實際上是由多個一維數組組成的,每個一維數組代表二維數組的一行。

以下是二維數組的基本語法:

data_type array_name[row_size][column_size];

在上述語法中,data_type 是數組中元素的數據類型,array_name 是數組的名稱,row_size 是數組的行數,column_size 是數組的列數。

以下是一個示例,展示如何聲明、初始化和訪問二維數組:

#include <stdio.h>int main() {int matrix[3][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}};// 訪問和輸出二維數組元素for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {printf("%d ", matrix[i][j]);}printf("\n");}return 0;
}

在這個示例中,我們聲明了一個名為 matrix 的3行4列的整數二維數組,然后初始化數組的各個元素,并使用兩層循環來遍歷并輸出整個二維數組。

你也可以在聲明二維數組時省略行數,只指定列數,然后在初始化時根據需要提供行數:

int matrix[][4] = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}
};

二維數組在模擬矩陣、表格等多維數據時非常有用。注意,在訪問二維數組元素時,需要使用兩個索引來指定行和列的位置。同樣要確保索引不超出數組的范圍,以避免訪問無效內存。


7.3 三維數組

三維數組是C語言中的一種高維數據結構,用于存儲立體的數據。類似于二維數組,三維數組實際上是由多個二維數組組成的,每個二維數組代表三維數組的一個平面。

以下是三維數組的基本語法:

data_type array_name[depth_size][row_size][column_size];

在上述語法中,data_type 是數組中元素的數據類型,array_name 是數組的名稱,depth_size 是數組的深度,row_size 是數組的行數,column_size 是數組的列數。

以下是一個示例,展示如何聲明、初始化和訪問三維數組:

#include <stdio.h>int main() {int cube[2][3][4] = {{{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}},{{13, 14, 15, 16},{17, 18, 19, 20},{21, 22, 23, 24}}};// 訪問和輸出三維數組元素for (int d = 0; d < 2; d++) {printf("Depth %d:\n", d + 1);for (int i = 0; i < 3; i++) {for (int j = 0; j < 4; j++) {printf("%d ", cube[d][i][j]);}printf("\n");}printf("\n");}return 0;
}

在這個示例中,我們聲明了一個名為 cube 的2層3行4列的整數三維數組,然后初始化數組的各個元素,并使用三層循環來遍歷并輸出整個三維數組。

三維數組在模擬立體的數據、圖像處理等領域非常有用。注意,在訪問三維數組元素時,需要使用三個索引來指定深度、行和列的位置。同樣要確保索引不超出數組的范圍,以避免訪問無效內存。


8 函數

8.1 函數定義與使用

函數是C語言中的重要概念,用于將代碼組織成可重用、模塊化的塊。函數允許你將一段特定的功能代碼封裝起來,并在需要時通過調用函數來執行該功能。

以下是定義和調用函數的基本語法:

return_type function_name(parameters) {// 函數體,執行具體功能// 可以包含多條語句return value; // 返回值(可選)
}

在上述語法中:

  • return_type 是函數的返回類型,指定函數返回的數據類型(如 intfloatvoid 等)。
  • function_name 是函數的名稱,用于在其他地方調用函數。
  • parameters 是函數的參數列表,用于接收函數調用時傳遞的參數。
  • return value(可選)是函數的返回語句,用于返回一個值給調用者。

以下是一個示例,展示如何定義和調用一個簡單的函數:

#include <stdio.h>// 函數定義
int add(int a, int b) {int result = a + b;return result;
}int main() {int num1 = 5, num2 = 7;// 調用函數并將返回值賦給變量int sum = add(num1, num2);printf("Sum: %d\n", sum);return 0;
}

在這個示例中,我們定義了一個名為 add 的函數,它接受兩個整數參數并返回它們的和。然后在 main 函數中調用了這個函數,并將返回的結果賦給變量 sum,然后輸出了和。

需要注意的是,函數需要在調用之前進行聲明或定義。如果函數定義在 main 函數之后,你需要在 main 函數之前提供函數的原型聲明。函數的參數和返回類型在聲明和定義時需要一致。

C語言中的函數允許你將代碼劃分成更小的模塊,提高了代碼的可維護性和可讀性。它們還可以被多次調用,使代碼得到重復使用。


8.2 函數的參數

函數的參數是在函數定義中用于接收傳遞給函數的值的變量。參數允許你在函數內部使用外部傳入的數據,從而實現更通用和可定制的函數功能。

C語言中函數的參數可以分為兩種類型:形式參數(也稱為形參)和實際參數(也稱為實參)。

  1. 形式參數(形參):
    形式參數是函數定義中聲明的參數,用于接收傳遞給函數的值。形式參數只在函數內部起作用,它們的值在函數調用時由實際參數傳遞。

    形式參數的聲明方式通常在函數的原型和定義中的參數列表中,例如:

    int add(int a, int b) {// 函數體
    }
    
  2. 實際參數(實參):
    實際參數是在函數調用時提供的參數值。實際參數可以是常量、變量、表達式等。在函數調用時,實際參數的值被傳遞給形式參數,從而函數可以使用這些值進行計算或處理。

    在調用函數時,實際參數可以按照形式參數的順序進行傳遞,例如:

    int main() {int result = add(5, 7); // 5和7是實際參數// ...
    }
    

函數的參數使得函數能夠處理不同的數據,并根據傳入的值執行相應的操作。在函數定義中,你可以在形式參數的位置使用這些參數,就像使用普通的變量一樣。調用函數時,實際參數的值會被復制到形式參數中,從而函數可以使用它們執行操作。

需要注意的是,參數的數據類型和順序在函數聲明和調用時必須一致。參數的名稱可以在函數定義和調用中不同,名稱只在函數內部起作用。

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/37919.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/37919.shtml
英文地址,請注明出處:http://en.pswp.cn/news/37919.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Rabbitmq延遲消息

目錄 一、延遲消息1.基于死信實現延遲消息1.1 消息的TTL&#xff08;Time To Live&#xff09;1.2 死信交換機 Dead Letter Exchanges1.3 代碼實現 2.基于延遲插件實現延遲消息2.1 插件安裝2.2 代碼實現 3.基于延遲插件封裝消息 一、延遲消息 延遲消息有兩種實現方案&#xff…

2016年,進了百度

昨在深圳出差&#xff0c;與微信里的朋友吃了個便飯&#xff0c;他是今年四月份加的我微信&#xff08;gaoyang677&#xff09;&#xff0c;他的經歷很有意思&#xff0c;經他許可&#xff0c;分享給大家。 2012年時候&#xff0c;他大學畢業來到深圳&#xff0c;進了廠子&…

vue3 setup+Taro3 調用原生小程序自定義年月日時分多列選擇器,NutUI改造

vue3 setupTaro3 調用原生小程序自定義年月日時分多列選擇器&#xff0c;NutUI改造 NutUI 有日期時間選擇器&#xff0c;但是滑動效果太差&#xff0c;卡頓明顯。換成 原生小程序 很順暢 上代碼&#xff1a; <template><view><pickermode"multiSelector&…

2023牛客暑期多校訓練營9-J Puzzle: Star Battle

2023牛客暑期多校訓練營9-J Puzzle: Star Battle https://ac.nowcoder.com/acm/contest/57363/J 文章目錄 2023牛客暑期多校訓練營9-J Puzzle: Star Battle題意解題思路代碼 題意 解題思路 出題人都說是詐騙題&#xff08;&#xff0c;可以發現滿足每行每列恰好有 n n n個星…

python數據結構和算法

python數據結構和算法 參考 python圖解算法 選擇/快速排序 哈希表 廣度優先搜索算法 迪杰斯特拉算法 貪婪算法 動態規劃 K-鄰近算法 計算機科學是解決問題的研究。計算機科學使用抽象作為表示過程和數據的工具。抽象的數據類型允許程序員通過隱藏數據的細節來管理問題領域的…

【解決】Kafka Exception thrown when sending a message with key=‘null‘ 異常

問題原因&#xff1a; 如下圖&#xff0c;kafka 中配置的是監聽域名的方式&#xff0c;但程序里使用的是 ip:port 的連接方式。 解決辦法&#xff1a; kafka 中配置的是域名的方式&#xff0c;程序里也相應配置成 域名:port 的方式&#xff08;注意&#xff1a;本地h…

機器學習筆記之優化算法(十三)關于二次上界引理

機器學習筆記之優化算法——關于二次上界引理 引言回顧&#xff1a;利普希茲連續梯度下降法介紹 二次上界引理&#xff1a;介紹與作用二次上界與最優步長之間的關系二次上界引理證明過程 引言 本節將介紹二次上界的具體作用以及它的證明過程。 回顧&#xff1a; 利普希茲連續…

uniapp 微信小程序 訂閱消息

第一步&#xff0c;需要先去小程序官方挑選一下訂閱模板拿到模板id 訂閱按鈕在頭部導航上&#xff0c;所以 <u-navbar :bgColor"bgColor"><view class"u-nav-slot" slot"left" click"goSubscribe"><image :src"g…

阿里社招一面記錄

一輪電話面試&#xff0c;一個半小時&#xff0c;昨天晚上面試的&#xff0c;今早面試官打電話約了二面&#xff08;為啥是一面面試官:&#xff09; 自我介紹 工作經歷&#xff0c;項目經歷項目挑兩個介紹一下 這里介紹了一個偏技術的基于Mysql搭建的olap系統&#xff0c;數據…

綜述:計算機視覺中的圖像分割

一、說明 這篇文章是關于圖像分割的探索&#xff0c;這是解決計算機視覺問題&#xff08;如對象檢測、對象識別、圖像編輯、醫學圖像分析、自動駕駛汽車等&#xff09;的重要步驟之一。讓我們從介紹開始。 二、圖像分割介紹 圖像分割是計算機視覺中的一項基本任務&#xff0c;涉…

【Maven】SpringBoot項目使用maven-assembly-plugin插件多環境打包

SpringBoot項目使用maven-assembly-plugin插件多環境打包 1.創建SpringBoot項目并在pom.xml文件中添加maven-assembly-plugin配置 <!-- 多環境配置 --><profiles><!-- 開發環境 --><profile><id>dev</id><properties><prof…

新一代分布式融合存儲,數據場景All In One

1、摘要 2023年5月11日&#xff0c;浪潮信息全國巡展廣州站正式啟航。會上&#xff0c;重磅發布新一代分布式融合存儲AS13000G7&#xff0c;其采用極致融合架構設計理念&#xff0c;實現同一套存儲滿足四種非結構化數據的“All In One”高效融合&#xff0c;數據存力提升300%&a…

基于WebSocket的在線文字聊天室

與Ajax不同&#xff0c;WebSocket可以使服務端主動向客戶發送響應&#xff0c;本案例就是基于WebSocket的一個在線聊天室&#xff0c;不過功能比較簡單&#xff0c;只能滿足文字交流。演示如下。 案例學習于b站up主&#xff0c;鏈接 。這位up主講的非常清楚&#xff0c;值得去學…

item_get_sales-獲取TB商品銷量詳情

一、接口參數說明&#xff1a; item_get_sales-獲取商品銷量詳情&#xff0c;點擊更多API調試&#xff0c;請移步注冊API賬號點擊獲取測試key和secret 公共參數 請求地址: https://api-gw.onebound.cn/taobao/item_get_sales 名稱類型必須描述keyString是調用key&#xff08…

Idea 快捷鍵整理

Idea快捷鍵和自動代碼補全匯總 idea快捷鍵匯總 Ctrl 快捷鍵說明Ctrl F在當前文件進行文本查找 &#xff08;必備&#xff09;Ctrl R在當前文件進行文本替換 &#xff08;必備&#xff09;Ctrl Z撤銷 &#xff08;必備&#xff09;Ctrl Y刪除光標所在行 或 刪除選中的行 &am…

設計HTML5圖像和多媒體

在網頁中的文本信息直觀、明了&#xff0c;而多媒體信息更富內涵和視覺沖擊力。恰當使用不同類型的多媒體可以展示個性&#xff0c;突出重點&#xff0c;吸引用戶。在HTML5之前&#xff0c;需要借助插件為網頁添加多媒體&#xff0c;如Adobe Flash Player、蘋果的QuickTime等。…

【C++精華鋪】6.C++類和對象(下)類與對象的知識補充及編譯器優化

目錄 1. 再談構造 1.1 成員變量的初始化&#xff08;初始化列表&#xff09; 1.2 初始化列表的行為 1.3 explicit關鍵字 2. 類中的static成員 2.1 靜態成員變量 2.2 靜態成員函數 3. 友元 3.1 友元函數 3.1 友元類 4. 內部類 5. 匿名對象 6. 對象拷貝時候的編譯器優化…

GitHub 打不開解決方案

GitHub 這幾年國內普通用戶越來越難以訪問&#xff0c;github 作為全球最大的開源平臺&#xff0c;里面有用的內容很多&#xff0c;不管是對專業用戶還是普通用戶&#xff0c;無法訪問都是很嚴重的問題。 1.GitHub 加速鏡像 kgithub 是一個公益加速項目&#xff0c;僅需在 gi…

【LeetCode每日一題】——41.缺失的第一個正數

文章目錄 一【題目類別】二【題目難度】三【題目編號】四【題目描述】五【題目示例】六【題目提示】七【解題思路】八【時間頻度】九【代碼實現】十【提交結果】 一【題目類別】 哈希表 二【題目難度】 困難 三【題目編號】 41.缺失的第一個正數 四【題目描述】 給你一個…

Compute shader SV 理解圖

本圖轉子&#xff1a;【Computeshader】個人總結_蔣偉博的博客-CSDN博客