[C++] map 的 subscript 運算子跟你想的不一樣

map 是一個 key-value pairs 群集, key 可以被當作索引,用以取回 value 。

這篇文章想講的重要的觀念就是,map 的下標操作(subscripting, [] 運算子)的行為與 vector 和 array 下標操作非常不同,即便索引尚未存在,我們可以直接使用尚未存在的索引,用來幫 map 添加一個帶索引的元素。

閱讀全文〈[C++] map 的 subscript 運算子跟你想的不一樣〉

Array Name 其實就是 Pointer

寫這篇文章的原因在於自己常常混淆一個觀念,在 C 語言中,若要傳遞陣列到函數中,函數的宣告可以寫為以下兩種格式:

int func (int *arr);

int func (int a[]);

如果要傳遞陣列到函數,以下方式都是正確的:

int data[10];

func (data);
func (&data[0]);

一直以來都沒有理解這兩種用法,導致使用或看 code 時,有不小的困擾,想藉著這篇文章探討這兩個用法的本質。

先說結論,其實 array 名稱在兩種狀況下會被自動轉為「一個 pointer 指向 array 的第一個元素」

閱讀全文〈Array Name 其實就是 Pointer〉

進不去的 if-else 條件運算式 – C 語言鬼故事

在工作上曾經遇到關於 if-else 的 bug ,明明 if 後的 expression 為 true ,但卻無法執行對應的程式碼。

進不去的程式碼

用以下程式為例, foo() 會根據 a 和 b 的值而有不同的回傳值。

閱讀全文〈進不去的 if-else 條件運算式 – C 語言鬼故事〉