主要補充與彙整課程筆記官方筆記:https://cs50.harvard.edu/x/2023/notes/2/ 補充資訊來源::Chat GPT
Arrays/數組
最重要目的:儲存多個變量值的優化方案
舉例:
// 使用數組前 int num1 = 22 int num2 = 44 int num3 = 77 // 使用數組後 for(i = 0; i < 3; i++) { int num[i] = get_int("輸入你的數字: ") }
1. Array 應用
儲存多個變量值
作為函數參數
2. 內存佈局
連續排列的方式存儲固定大小的相同類型元素
連續的存儲方式允許通過索引快速訪問任何元素
數組的大小在創建時就被固定,並且之後不能改變
長度獲取的限制
在 C 語言中,無法通過函數獲取數組的長度(有幾個數組)
需要另用參數傳遞給函數來表示數組長度
String/字符串
1. 基本概念
書寫方式:
string s = "hi!";
字符底層由已由字符數組(char 數組)自動化實現,故不用加
[ ]
每個字符串的末尾都有一個
\0
字節告訴程式這是字符串的結束
此字節也叫做哨兵值
由char array/字符數組組成
2. printf函數和 \0
- 在打印字符串時,
printf
函數遇到\0
會停止打印。
3. 內存佈局
1 個字符 1 個字節(byte)
以 "HI!" 為例:
string s = "HI!"
字符串 "HI!" 總共使用 s + 1 個字節(3 個字符 + 1 個
\0
)字符串內存概念如下:
H
I
!
\0
對照 ASCII 表中的十進制,也就是字符在電腦中真正儲存的方式如下:
0
在 ASCII 表中映射的是 NUL 。72
S[0]72
S[1]72
S[2]0
S[3]
在 C 語言中,\0
用於表示字符串的結束,它對應於 ASCII 表中的 NUL 字符,其十進制值是 0,在內存中以 8 個零位(00000000)表示
因此也可說 \0
也可說由 8 個全零位組成或叫做 NUL
4. 專有名詞說明
Sentinel Value/哨兵值
- Sentinel Value/哨兵值:表示數據結構的邊界或結束
\0
\0
:是一個空字符,用於表示字符串的結束- 也可說 8 個零位或叫 NUL
Global Variable/全局變量
- Global Variable/全局變量:在整個程式中都可以訪問此變量
Constants/常量
- Constants/常量:在定義後其值就固定了,不能被修改,命名通常使用全大寫字母,以區分於變量