摘要:局部變量的作用域是變量所在的局部范圍。生命周期變量的生命周期變量的創建和銷毀之間的時間段局部變量的生命周期進入作用域生命周期開始,出作用域生命周期結束。
就在前幾天,C語言入門到進階部分的專欄——《維生素C語言》終于完成了。全文共計十八個章節并附帶三張筆試練習篇,美中不足的是,第一章和第二章是以截圖形式展現的。由于本人一開始是在有道云筆記上寫的初稿,當時想方便省事(有道云排版個人感覺確實比較美觀)就直接以截圖的形式完成了第一章和第二章。本人考慮到因為是截圖,不能復制文中出現的代碼,不方便讀者進行復制粘貼,所以我打算重新寫一下第一章和第一章的內容,并且重新進行了排版。
本章從如何寫主函數開始講起,對C語言基礎知識點進行蜻蜓點水地介紹,想看詳細講解教學請訂閱專欄!專欄連接:《維生素C語言》
? 何為main函數?
main函數,又稱主函數,是程序執行的起點。
1. 主函數是程序的入口
2. 主函數有且只有一個
? 一個工程中可以有多個“.c文件”,但是多個“.c文件”中只能有一個“main 函數”
?? "你好,世界!"
#include //頭文件int main(){ printf("hello world!/n"); return 0;}
? 編譯 + 鏈接 + 運行代碼
快捷鍵: Ctrl + F5( VS2013 )
[調試] -> [選擇" 開始執行(不調試)"]
? “是不是有什么一閃而過了?”
因為程序執行得太快,所以沒有看到結果。
為了看到結果,我們需要設置一下 VS2013 的屬性 ( VS2019不需要設置項目屬性 )
[解決方案資源管理器] -> [右鍵項目名稱] -> [屬性] -> [鏈接器] -> [系統]-> [子系統] -> [選擇" 控制臺(/SUBSYSRTEM:CONSOLE) "]
? 運行結果如下:
? 這里先做些簡單的介紹:
? 基本數據類型的使用方法:
int main(void){ char ch = "a"; int age = 20; float weight = 50.8; double d = 0.0; return 0;}
? 格式說明由“%”和格式字符組成:
? 演示:
int main(){ printf("%d/n", 100); printf("%c/n", "a"); float foo = 5.0; printf("%f/n", foo); double pi = 3.14; printf("%.2lf/n", pi); // .xf(x為小數點保留幾位數) char str1[] = "hello"; printf("%s/n", str1); int a = 10; printf("%p/n", &a); return 0;}
? 運行結果: 100 a 5.000000 3.14 hello 0000000000061FE04
? 32位系統下:
? sizeof 函數:獲取數據在內存中所占用的存儲空間,以字節為單位計數
? 使用方法演示:
int main(void){ char a = "A"; printf("%d/n", sizeof(a)) printf("%d/n", sizeof a) //求變量時可省略括號 ? printf("%d/n", sizeof(char)); printf("%d/n", sizeof char); //error!但是求字符類型時不可省略 ? return 0;}
? 運行結果:1
? 使用 sizeof 求元素個數:
int main(void){ int arr[] = {1,2,3,4,5,6,7,8,9,10}; printf("%d/n", sizeof(arr)); //計算的是數組的總大小,單位是字節 printf("%d/n", sizeof(arr[0])); //計算的是數組首字符大小 int sz = sizeof(arr) / sizeof(arr[0]); printf("%d/n", sz); return 0;}
? 運行結果: 40? 4? 10
? 計算機中的單位: bit - 比特位
計算機中識別二進制:1&0???????? 8進制:0-7??????? 10進制:0-9
?
?? 代碼演示:
#include int main(void){ int age = 20; double weight = 62.5; age = age + 1; weight = weight - 10; printf("%d/n", age); printf("%lf/n", weight); return 0;}
?
?
? 局部變量和全局變量的名字相同時,局部變量優先,對局部影響:
int var = 100;int main(void){ int var = 10; printf("%d/n", var); return 0;}
? 運行結果: 10
?
? 使用方法演示:
int main(void){ int a = 0; scanf("%d", &a); printf("%d", a); return 0;}
? 使用方法演示:寫一個代碼求兩個變量的和
int main(void){ int a = 0; int b = 0; int sum = 0; scanf("%d %d", &a, &b); sum = a + b; printf("sum = %d/n", sum); return 0;}
? 如果編譯器發出了警告,說 scanf 不安全,在代碼前面添加
#define _CRT_SECURE_NO_WANRINGS 1
即可,當然還有其他方法可以解決,這里就不細說了。
?
? 運行結果如下:(假設輸入了 1 2)
sum = 3
? 作用域(scope)
程序設計概念,通常來說,一段程序代碼中所用到的名字并不總是有效/可用 的 而限定這個名字的可用性的代碼范圍就是這個名字的作用域。
全局變量的作用域是整個工程。
局部變量的作用域是變量所在的局部范圍。
? 生命周期:
變量的生命周期:變量的創建和銷毀之間的時間段
局部變量的生命周期:進入作用域生命周期開始,出作用域生命周期結束。
全局變量的生命周期:整個程序的生命周期。
? 局部變量的生命周期:
int main(){ { int a = 10; printf("%d/n", a); } printf("%d/n", a); //error 生命周期結束了}
? 全局變量的生命周期
//聲明一下變量extern int g_val;int main(){ printf("%d", g_val);}
? 定義:C語言中常量和變量的定義的形式有所差異
C語言的常量分為以下幾種:
① 字面常量:直接寫
② const 修飾的常變量:用 const 定義
③ #define 定義的標識符常量:宏定義
④ 枚舉常量:可以一一列舉的常量
? 字面常量:
int main(void){ 3.14; 10; "a"; "abcdef";}
? const 修飾的常量:
int main(void){ const int num = 10; num = 20; //error, 不能修改 printf("num = %d/n", num);}
? 運行結果: 10
? #define 定義的標識符常量:
#define MAX 10000 // 不寫=,不加分號!int main(void){ int n = MAX; printf("%d/n", n);}
? 運行結果:10000
? 枚舉常量:
//性別enum Sex { //這種枚舉類型的變量的未來可能取值 //枚舉常量 MALE = 3, //賦初值 FEMALE, SECRET};int main(void){ enum Sex s = MALE; printf("%d/n", MALE); // MALE = 3 error 不可修改 printf("%d/n", FEMALE); printf("%d/n", SECRET); return 0;}
? 注意事項:
const 只是一個有常屬性的變量,本質上仍然為變量!arr[], 數組的大小必須是常量!
int main(){ const int n = 10; //n是變量,但是又有常屬性,所以我們說n是常變量 int arr[n] = {0}; // 仍然不可以,因為n是變量,只是有常屬性而已 return 0;}
? #define 定義的可以,宏定義用得最多的地方是在數組中用于指定數組的長度:
#define N 10int main(){ int arr[N] = {0}; return 0;}
? 注意事項:
枚舉常量雖然是不能改變的,但是通過枚舉常量創造出來的變量是可以改變的!
enum Color { // 枚舉常量 RED, YEELOW, BULE};int main(void){ enum Color c = BULE; //我們創建一個變量c,并將BULE賦給它 c = YEELOW; //這時將YEELOW賦給它,完全沒有問題 ? BULE = 6; //error!枚舉常量是不能改變的 ? return 0;}
? 定義:
"hello?world."
這種由雙引號(Double Quote)引起來的一串字符稱為字符串字面值(String Literal)
? 關于斜杠零:
字符串的結束標志是一個 /0 轉義字符。
在計算字符串長度的時候 /0 是結束標志,不算字符串的內容!
? 下面代碼,打印的結果是什么?為什么?
int main(void){ char arr1[] = "abc"; //數組 // "abc" -- "a" "b" "c" "/0" // 這里面,"/0" 字符串的結束標志 char arr2[] = {"a", "b", "c"}; char arr3[] = {"a", "b", "c", "/0"}; printf("%s/n", arr1); printf("%s/n", arr2); printf("%s/n", arr3); return 0;}
? 打印結果如下:
?
? strlen 函數:返回字符串的長度
? 使用時需引入頭文件
?
? 代碼演示:
#include #include int main(){ char arr1[] = "abc"; char arr2[] = {"a", "b", "c"}; printf("%d/n", strlen(arr1)); printf("%d/n", strlen(arr2)); return 0;}
?? 運行結果如下:? 3?? 隨機值
?
?
? ASCII (American Standard Code for Information Interchange)
“是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是最通用的信息交換標準,并等同于國際標準ISO/IEC 646。ASCII第一次以規范標準的類型發表是在1967年,最后一次更新則是在1986年,到目前為止共定義了128個字符”
?
? 轉意字符顧名思義就是轉變字符的意思。
?
? 讓斜杠就是斜杠:
int main(){ printf("c://test//32//test.c"); //再加一個斜杠,規避轉義字符檢測 return 0;}
?? 運行結果:? c:/test/32/test.c
? 三字母詞、輸出單引號、ffffd、xdd:
int main(){ printf("(are you ok?/?)/n"); // ??) -- ] - 三字母詞 printf("%c/n", "/""); //輸出一個單引號 printf("%s/n", "/""); //輸出一個雙引號 printf("%c/n", "/130");//8進制的130是10進制的多少呢? //X - ASCII碼值是88 printf("%c/n", "/101"); // A- 65 - 8進制是:101 printf("%c/n", "/x30"); //48 - "0" return 0;}
? 運行結果:? (are you ok??) " " X A 0
? 下列代碼打印的結果是什么?
int main(){ printf("%d/n", strlen("c:/test/328/test.c")); return 0;}
? 答案:14
?
? 代碼中有不需要的代碼可以直接刪除,也可以注釋掉
代碼中有些代碼比較難懂,可以加一下注釋文字
有兩種風格:
① C語言風格的注釋 ? /*?xxxxxx?*/
缺陷:不能嵌套注釋
② C++風格的注釋 ?? //xxxxxxxxx
優點:可以注釋一行也可以注釋多行
快捷鍵:Ctrl + /?
? 演示:
/* C語言風格注釋int Add(int x, int y) { int z = 0; z = x + y; return z;}*/int Add(int x, int y) { return x + y;}int main(void){ // C++注釋風格 // int a = 10; printf("%d/n", Add(1,2)); //調用Add函數 return 0;}
? 定義:if 語句是指編程語言(包括c語言、C#、VB、java、匯編語言等)中用來判定所給定的條件是否滿足,根據判定的結果(真或假)決定執行給出的兩種操作之一。
?
? 選擇語句代碼演示:
int main(void){ int a = 10; int b = 20; if(a>b) { printf("a比b大/n") ; } else { printf("b比a大/n"); } return 0;}
? 運行結果:? b比a大
?? C語言中如何實現循環呢?
1. while 語句
2. for 語句
3. do ... while 語句
這里我們著重先了解下 while 語句。
? while 循環的基本概念:while是計算機的一種基本循環模式。當滿足條件時進入循環,進入循環后,當條件不滿足時,跳出循環。
?
? 演示代碼:敲三萬行代碼
#include int main(void){ int line = 0; while(line < 30000) { printf("敲代碼: %d/n", line); line++; } if(line == 30000) { printf("恭喜你敲滿30000行代碼!/n"); } return 0;}
? 什么是函數?
數學中的函數 f(x) = 2×x+5,C語言中的函數也是一樣的。
? 函數的特點就是:簡化代碼,代碼復用。
?
? 代碼演示:
int Add (int x, int y) { int z = 0; z = x + y; return z;}int main(void){ int num1 = 0; int num2 = 0; scanf("%d%d", &num1, &num2); // int sum = num1 + num2; // 函數的方式解決 int sum = Add(num1, num2); printf("%d/n", sum); return 0;}
?
? 要存儲1-10的數字,怎么存儲?
“C語言給了數組的定義:一組相同類型元素的集合”
定義一個整型數組,最多放十個元素:
?
? 代碼演示:
int main(){ int a = 0; int b = 0; int c = 0; int d = 0; //... // 10個整型1-10存起來 int arr[10] = {1,2,3,4,5,6,7,8,9,10}; char ch[5] = {"a", "b", "c"}; // 不完全初始化,剩余的默認為0 // 用下標就可以訪問元素 printf("%d/n", arr[0]); // 打印整個數組 int i = 0; while(i<10) { printf("%d ", arr[i]); i++; } return 0;}
?
? 什么是算數操作符?
? 算術運算符即算術運算符號。是完成基本的算術運算 (arithmetic operators) 符號,就是用來處理四則運算的符號。
?
? 代碼演示:
int main(){ int add = 1 + 1; int sub = 2 - 1; int mul = 2 * 3; float div = 9 / 2.0; //只要有浮點數出現,執行的就是浮點數除法 int mod = 123 % 10; return 0;}
? 什么是移位操作符?
? 移位運算符在程序設計中,是位操作運算符的一種。移位運算符可以在二進制的基礎上對數字進行平移。
?
? 代碼演示:
int main(){ // 移位操作符 移動的是它的二進制位 // << 左移 // >> 右動 int a = 1; // 整形1占4個字節-32bit位 // 0000000000000000000000000000001 int b = a<<1; // 0000000000000000000000000000010 左邊丟棄,右邊補0 printf("%d/n", b); printf("%d/n", a); return 0;}
?? 運行結果: 2 1
? 什么是位操作符?
? 位操作是程序設計中對位模式按位或二進制數的一元和二元操作
? 代碼演示:
#include int main(){ //位操作 依然是二進制位 // & 按位與 都為真,則返回真,只要出現假,就返回假 int a = 3; //真 int b = 5; //真 int c = a&b; //按位與 // 011 // 101 // 001 // R→ 1 //真 printf("%d/n", c); int d = a|b;// 按位或 有真則為真,無則假,只要出現真,就返回真 // 011 // 101 // 111 // R→ 7 printf("%d/n", d); int e = a^b;// 按位異或 相同為假,相異為真 11/ 00-> 0 10 -> 1 //異或的計算規律 //對應的二進制位相同,則為0 //對應的二進制位相異,則為1 // 011 // 101 // 110 // R→ printf("%d/n", e); return 0;}
? 什么是賦值操作符?
? 賦值運算符是雙目運算符,用在賦值表達式中。賦值運算符將值存儲在運算符左邊操作數指定的變量中。
?
? 代碼演示:
#include int main(){ int a = 10; a = 20; // “=” 賦值 “==” 判斷相等 a = a+10; //1 a += 10; // 2 a = a-20; a -= 20; a = a & 2; a &= 2; //這些操作叫做 復合賦值符 return 0;}
? 什么是單目操作符?
? 單目操作符,也就是只接受一個操作數的操作符。
?
? 邏輯反操作 !
int main(){ //0表示假,非0就是真 int a = 5; printf("%d/n", !a); if(a) { //如果a為真,做事 } if(!a) { //如果a為假,做事 } while(a); //a != 0,做事 while(!a); //a=0,做事 return 0;}
?
? 按位取反 ~
int main(){ int a = 0; printf("%d/n", ~a); // ~ 按(二進制)位取法 //把所有二進制位的數字,1變成0,0變成1 //整數a // 0 // 00000000000000000000000000000000 // 11111111111111111111111111111111 ~a // 數據在內存中存儲的是補碼 // 一個整數的二進制表示有三種: 原碼 反碼 補碼 // 負數的計算 -1: // 10000000000000000000000000000001 (原碼) // 11111111111111111111111111111110 (反碼) // 11111111111111111111111111111111 (補碼) -> 在內存中存的 // 正的整數: 原碼、反碼、補碼相同 return 0;}
? 前置++
int main(){ int a = 10; int b = ++a; //前置++, 先++后使用 printf("%d/n", b); //11 printf("%d/n", a); //11 return 0;}
? 后置++
int main(){ int a = 10; int b = a++; //后置++,先使用再++ printf("%d/n", b); printf("%d/n", a); return 0;}
? 強制類型轉換:
int main(){ int a = (int)3.14; //強制類型轉換 printf("%d/n", a); return 0;}
? 邏輯運算符或邏輯聯結詞把語句連接成更復雜的復雜語句
邏輯與:兩個都為真即為真(and)
邏輯或:一個為真即為真(or)
?
? 邏輯與 &&
int main(){ int a = 3; int b = 5; int c = a && b; printf("%d/n", c); //1 return 0;}
?
? 邏輯或 ||
int main(){ int a = 3; int b = 0; int c = a||b; printf("%d/n", c); //1 return 0;}
? 條件操作符就是三目操作符
exp1成立,exp2計算,整個表達式的結果是:exp2的結果。
exp1不成立,exp2計算,整個表達式的結果是:exp3的結果。
?
? 條件操作符的用法:
int main(){ //exp1成立,exp2計算,整個表達式的結果是:exp2的結果 //exp1不成立,exp3計算,整個表達式的結果是exp3的結果 int a = 0; int b = 3; int max = 0; /* 等價于 if(a>b) { max = a; } else { max = b; } */ max = a>b ? a : b; return 0;}
? 逗號表達式:逗號隔開的一串表達式。
逗號表達式是從左向右依次計算的。
整個表達式的結果是最后一個表達式的結果。
?
? 逗號表達式的用法演示:
int main(){ (2, 3+5, 6); int a = 0; int b = 3; int c = 5; // a=5 c=5-4 b=1+2 int d = (a=b+2, c=a-4, b=c+2); printf("%d/n", d); // 3 return 0;}
?? [] 就是下標引用操作符。
? 演示:
int main(){ int arr[10] = {1,2,3,4,5,6,7,8,9,10}; printf("%d/n", arr[5]); // 6 return 0;}
? 調用函數時,函數名后面的()就是函數調用操作符
? 演示:
int main(){ printf("hehe/n"); printf("%d", 100); return 0;}
? C語言提供的關鍵字:
1. C語言提供的,不能自己創建關鍵字
2. 關鍵字不能做變量名
?這里我們來簡單地介紹幾個:
? auto - 自動的
int main(){ { int a = 10; //自動創建,自動銷毀的 - 自動變量 // auto省略掉了 auto int a = 10; // auto新的C語言中也有其它用法 - 暫時不考慮 } return 0;}
? register - 寄存關鍵字
int main(){ // 大量/頻繁使用的數據,想放在寄存器中,提升效率 register int num = 100; //建議num的值存放在寄存器中 //是不是最終放到寄存器中是編譯器說的算 // 其實現在編輯器已經很聰明了, // 就算你不主動加register,它也會幫你存到寄存器中。 return 0;}
? typedef - 類型重命名
// 這種羅里吧嗦的變量我們可以把它重命名一下typedef unsigned int u_int;int main(){ unsigned int num = 100; u_int num2 = 100; //和上面是等價的 return 0;}
? static - 靜態的
1. static修飾局部變量
2. static修飾全局變量
3. static修飾函數
? static修飾局部變量
函數中局部變量:
聲明周期延長:該變量不隨函數結束而結束
初始化:只在第一次調用該函數時進行初始化
記憶性:后序調用時,該變量使用前一次函數調用完成之后保存的值
存儲位置:不會存儲在棧上,放在數據段
void test() { static int a = 1; //不銷毀,生命周期變長了 a++; printf("%d ", a);}int main(){ int i = 0; while(i<10) { test(); i++; } return 0;}
? 運行結果: 2 3 4 5 6 7 8 9 10 11
?
?
? static修飾全局變量
改變該變量的鏈接屬性,讓該變量具有文件作用域,即只能在當前文件中使用。
① Global.c:
static int g_val = 2021;// static 修飾全局變量,// 使得這個全局變量只能在自己所在的源文件(.c)內部可以使用// 其他的源文件不能使用!// 全局變量,在其他原文件內部可以被使用,是因為全局變量具有外部鏈接屬性// 但是被static修飾之后,就變成了內部鏈接屬性,// 其他的源文件就不能鏈接到這個靜態的全局變量了!
② test.c:
extern int g_val;int main(){ printf("%d/n", g_val); return 0;}
? 運行結果: test.obj : error LNK2001: 無法解析的外部符號 _g_val
?
? static修飾函數
改變該函數的鏈接屬性,讓該函數具有文件作用域,即只能在當前文件中使用。
① Add.c:
//static修飾函數,static int Add(int x, int y) { return x + y;}
? test1.c:
extern int Add(int, int); //聲明外部函數int main(){ int a = 10; int b = 20; int sum = Add(a, b); printf("sum = %d/n", sum); return 0;}
? 運行結果:
test.obj : error LNK2019: 無法解析的外部符號 _Add,該符號在函數 _main 中被引用
?
? define 是一個預處理指令:
1. define 定義標識符常量
2. define 定義宏
? define 定義標識符常量:
#define MAX 1000int main(){ printf("%d/n", MAX); return 0;}
? define 定義宏:
#define ADD(X, Y) X+Y#define ADD1(X, Y) ((X)+(Y))int main(){ printf("%d/n", 4*ADD(2, 3)); // 4*2+3 = 11 printf("%d/n", 4*ADD1(2, 3)); // 4*(2+3) = 20 return 0;}
? 什么是指針?
指針就是地址,地址就是指針。
指針,是C語言中的一個重要概念及其特點,也是掌握C語言比較困難的部分。指針也就是內存地址,指針變量是用來存放內存地址的變量,不同類型的指針變量所占用的存儲單元長度是相同的,而存放數據的變量因數據的類型不同,所占用的存儲空間長度也不同。有了指針以后,不僅可以對數據本身,也可以對存儲數據的變量地址進行操作。
?
? 變量都有地址,取出變量的地址如下:
int main(){ int a = 10; // a在內存中要分配空間 - 4個字節 &a; // 取出num的地址 printf("%p/n", &a); //%p - 以地址的形式打印 return 0;}
? 打印出來的是a的地址
?
? 定義指針變量,存儲地址
* 說明 pa 是指針變量
int 說明 pa 執行的對象是 int 類型的
int main(){ int a = 10; int* pa = &a; // pa是用來存放地址的,在C語言中叫pa的是指針變量 char ch = "w"; char* pc = &ch; return 0;}
如果把定義指針理解為包裝成快遞,那么“解引用操作”就可以理解為是拆包裹
拆出來的值就是那個變量的值,甚至還可以通過“解引用”來修改它的值。
? 解引用操作用法:
int main(){ int a = 10; int* pa = &a; *pa = 20; // * 解引用操作 *pa就是通過pa里邊的地址,找到a printf("%d/n", a); //20 return 0;}
? 指針的大小
“指針的大小是相同的”
? 為什么相同?
“因為指針是用來存放地址的,指針需要多大空間,取決于地址的存儲需要多大空間”
? 指針是一種復合數據類型,指針變量內容是一個地址,因此一個指針可以表示該系統的整個地址集合,故按照32位編譯代碼,指針占4個字節,按照64位編譯代碼,指針占8個字節(注意:不是64位系統一定占8個字節,關鍵是要按照64位方式編譯)。
32位 - 32bit - 4byte
64位 - 64bit - 8byte
? sizeof 計算指針的大小:
int main(){ printf("%d/n", sizeof(char*)); printf("%d/n", sizeof(short*)); printf("%d/n", sizeof(int*)); printf("%d/n", sizeof(long*)); printf("%d/n", sizeof(long long*)); printf("%d/n", sizeof(float*)); printf("%d/n", sizeof(double*)); return 0;}
32位下都是 4???????? 64位下都是 8
? 結構體可以讓C語言創建出新的類型
“結構體是C語言中特別重要的知識點,結構體使得C語言有能力描述復雜的類型”
? 使用結構體描述學生 / 描述書:
// 創建一個學生的類型struct Stu { char name[20]; // 姓名 int age; // 年齡 double score; // 分數}; // ← 不要忘了加分號// 創建一個書的類型struct Book { char name[20]; float price; char id[30];};
? 結構體的初始化:
點操作符和箭頭操作符
. 結構體變量.成員
-> 結構體指針->成員
struct Stu { char name[20]; // 姓名 int age; // 年齡 double score; // 分數};struct Book { char name[20]; float price; char id[30];};int main(){ struct Stu s = {"張三", 20, 85.5}; // 結構體的創建和初始化 // 點操作符 printf("1: %s %d %lf/n", s.name, s.age, s.score); struct Stu* ps = &s; printf("2: %s %d %lf/n", (*ps).name, (*ps).age, (*ps).score); // ? // 箭頭操作符 printf("3: %s %d %lf/n", ps->name, ps->age, ps->score); // ? return 0;}
Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .
俞甲子 / 石凡 / 潘愛民. 《程序員的自我修養》[M]. 電子工業出版社, 2009-4.
百度百科[EB/OL]. []. https://baike.baidu.com/.
比特科技. C語言基礎[EB/OL]. 2021[2021.8.31]. .
本章完。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/121144.html
摘要:嚴格地說,應該是模仿實驗。為什么覺得無從下手,看資料沒有頭緒經驗總結看資料需要計劃耐心和速度這里所謂的資料包括書籍文檔。建議有報銷條件的同學自己設計一塊板子學習。無法報銷的同學,可以選購一款開發板學習。 STM32系列基于專為要求高性能、低成本、低功耗的嵌入式應用專門設計的ARMCortex...
摘要:前言回顧前面多線程三分鐘就可以入個門了源碼剖析多線程基礎必要知識點看了學習多線程事半功倍鎖機制了解一下簡簡單單過一遍只有光頭才能變強上一篇已經將鎖的基礎簡單地過了一遍了,因此本篇主要是講解鎖主要的兩個子類那么接下來我們就開始吧一鎖首先我們來 前言 回顧前面: 多線程三分鐘就可以入個門了! Thread源碼剖析 多線程基礎必要知識點!看了學習多線程事半功倍 Java鎖機制了解一下 AQ...
摘要:列入全國計算機二級取代,部分城市試點,引入高中。建議通過視頻學習,這樣不但節省時間,而且效果很好。能否回憶起那個陡峭的學習曲線問題越多,學的越快。出報告每完成一個項目,總結報告,必不可少。結構化學習,才是你我需要真正培養的能力。 編程就如同你學習開車,即使,你可以一口氣,說出一輛車的全部零部件,以及內燃機進氣、壓縮、做功和排氣過程,但你就是不去練如何開車,怎么上路。你確定,你敢開嗎?你...
摘要:從白天到晚上,不是在學就是在學的路上,從測試理論到實戰操作,大大小小的問題,在群里前輩的幫助下,總是能很快解決。慢慢的,測試方法,用例設計,測試,測試,接口測試。大概面試了一周多,我就拿下了的。 ...
閱讀 1635·2021-10-09 09:44
閱讀 2768·2021-10-08 10:04
閱讀 2461·2021-09-26 09:55
閱讀 3830·2021-09-22 10:02
閱讀 3303·2019-08-29 17:08
閱讀 1063·2019-08-29 15:08
閱讀 2951·2019-08-26 13:52
閱讀 3266·2019-08-26 13:34