CS50-week02-note-Arrays-String

CS50-week02-note-Arrays-String

week 2 Arrays

主要補充與彙整課程筆記官方筆記: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/常量:在定義後其值就固定了,不能被修改,命名通常使用全大寫字母,以區分於變量