2010年1月20日 星期三

Why is Row Irrelevant in 2-Dimensional Arrays?

在傳入 2-dimensional array 到某個 function 裡面, 我們可以省略 row 的 subscript, 但是 column 的 subscript 確不可以省略.

ex:
void funtion(int array[][5]);

從 reference 查到的原因是因為, C 必須知道有多少 column, 所以他才可以正確的找到每個row的起點在哪.

我們來看看可以作為存取 2-dimensional 資料的宣告方式.

2010年1月19日 星期二

do while(false)

常在一些open source看到do while(false)的寫法,這樣一次call function只執行一次的code有甚麼優點呢?
可不可以用if(flag)的方式取代? 是不是覺得多此一舉或有其他更好的替代方法,討論看看。


2010年1月18日 星期一

enum

  • 以前我們在Effective C++ 有看過, 用enum取代 #define 跟 const 可以避免錯誤。
  • 許多遊戲engine 或包含大量UI的AP會使用enum管理音效, 貼圖等recourse。
  • enum還有個有趣的技巧叫 enum hack, 方便我們針對enum眾多recourse 的物件寫基本的測試程式。
請看以下宅力十足的code


2010年1月7日 星期四

Data structure alignment

前些時候將Structure內的資料以raw data的方式在處理時,才發現到原來Structure內的element並不是緊密相連在一起的。如以下例子:

2010年1月5日 星期二

X = X & X-1 Trick

最近在寫練習的時候看到這個有趣的習題, 相信很多人已經知道了,
就是在 2's complement 裡面, X = X & X-1, 會移除 X 裡面最右邊的 1,
在 C 裡面, 只要在 unsigned (或者全為正數)的變數裡面, 就可以用這個方法,
主要原因, 我想應該是在 2 進位的體系下, 只要讓某個值少 1, 就會讓那個值最後的一個1的右邊數值產生借位, 而造成了一個很有趣的 Pattern如下: