---
# System prepended metadata

title: CS50 x 2021 week 2 筆記
tags: [CS50]

---

---
tags: CS50
---
# CS50 x 2021 week 2 筆記
這週一開始在介紹 debugger 與一些 CS50 線上IDE 的其他功能。
到了後面開始說明 C 語言的 array、string，還有 command line arguments、exit status，以及介紹當週的作業：readability 與 cryptography。
## Array

C 的整數陣列宣告：
```c=
int scores[3];
```
代表 `scores` 是一個長度為 `3` 的 `整數` 陣列。

```c=
scores[0] = 72;
scores[1] = 73;
socres[2] = 33;
```
因為陣列是連續儲存的，因此必須**從 0 開始**，不然會浪費 0 這個位置的空間。

### Constant variable
在宣告變數之前加上 `const` 關鍵字，就可以讓這個變數無法被改變，例如：
```c
const int TOTAL = 3;
```
在撰寫上會習慣將無法改變的常數名稱以全部大寫表示，方便區分。

### Array as function input
在 C 語言中，在函式裡輸入陣列的方法：
```c=17
float average(int length, int array[])
{
    // Ho ho something ...
}
```

## String
正常而言，C 語言並沒有 string 型別，只有 char，且只能儲存一個字，string 是由 `<cs50.h>` 提供。

雖然 string 是由外部套件提供，但是其原理就如同 array，只是裡面裝的是 char。

在字串內，會使用 `\0` (null) 來代表一個字串的結束。

## Command line arguments
如果想要直接在執行程式時輸入指令的話，可以使用這個方法：
```c=
#include <stdio.h>
#include <cs50.h>

int main(int argc, string argv[])
{
    // 執行程式本身也算一個 argc
    // 因此判斷為 2，代表只有一個額外參數 (加上執行程式本身)
    if (argc == 2)
    {
        // Ho ho something...
    }
    else
    {
        // Hey hey something...
    }
}
```
如此一來，便可以在執行程式之前輸入其他東西
```shell=
./argv Johnney
```

## Exit status
大部分的情況，main 函式都會預設回傳 int 而非 void，那是為了表達程式執行結果的狀態碼。
程式沒有問題的情況下，main 可以回傳 0；若真的在執行過程中出現問題，main 就會回傳 1。
若要得知程式執行後的狀態碼，可以在程式結束後輸入 `echo $?` 指令。