對於之前”指標特輯”的前三篇文,在程式中讓人感覺實用意義並不大,接下來要說的全都是重點,如果前三篇文沒有看懂的人,請先回去看懂吧。

1. 為什麼要用動態記憶體:一般我們使用陣列時,你不可以隨時改變陣列的大小,陣列的大小在宣告時就已經確定。所以不可能會有像以下的程式碼出現

Edison 發表在 痞客邦 留言(3) 人氣()

現在,要為各位介紹CallByReference進行SWAP的做法。先聲明,CallByReference是在C++才有的概念,不過由於現在Complier幾乎沒有單獨支援C不支援C++的, 所以就算用C語言去寫CallByReference還是可被接受。

我們前面有提過CallByValue和CallByAddress,不管是哪種方法,OS都會再次配置副函式引數所需的記憶體空間,但CallByReference是非常特別的方法,OS是直接跑到主函式a, b的位址直接進行運算,並沒有再配置額外的記憶體。所以也有人說,使用CallByReference的速度會比較快。CallByReference的寫法大致如下:

Edison 發表在 痞客邦 留言(3) 人氣()

接下來的這個其實不是我要說明,而是留給各位思考,這個問題並不會太難或是太複雜...現在再次考慮 SWAP_A 的副函式,只是我寫的方式換了

原本的:

Edison 發表在 痞客邦 留言(2) 人氣()

這是一個討論很久的名詞問題。

void f(int *x)

Edison 發表在 痞客邦 留言(4) 人氣()

現在,假設我要寫一個函數,這個函數是交換二個整數,也就是 a 的值給 b, b 的值給 a,該怎麼寫?這種問題是一般初學者最常犯的錯誤 – 使用 call by value。下面的例子說明了為什麼不能使用 call by value 的方式進行 swap 的動作。在看此例的執行結果時,手邊一樣先準備好紙跟筆,畫出各變數的記憶體位置及儲存值,對學習會很很大的幫助。

 原始碼:

Edison 發表在 痞客邦 留言(1) 人氣()

指標的指標,說穿了只是雙重指標而已。假設 ptr1 是指向變數a的指標,ptr2為指向ptr1的指標,那麼 ptr2 就是變數a “指標的指標”(ptr2→ptr1→a)。這部份很容易搞亂,麻煩請準備紙筆在手邊會比較方便。

現在考慮以下指令:

Edison 發表在 痞客邦 留言(2) 人氣()

接下來為各位介紹陣列和指標的關係。在這裡要先跟大家討論說明,陣列其實本身就是一種指標,但指標本身是一種陣列嗎?答案是否定的,但你的確可以把指標當作陣列在使用(也就是所謂的動態陣列,這個以後會提到)。 

我們先設一個一維陣列,其內容為 for(i=0; i<MAX; i++) Array[i] = I; 由於OS分配給陣列的記憶體位置是連續的,所以配置好後其記憶體示意圖如下所示。 

Edison 發表在 痞客邦 留言(8) 人氣()

「學C語言如果不會用指標,那千萬別說學過」我非常讚同這句話..
對於一般人,指標往往是進入 C 語言後難以跨過的障礙,我也不例外..

Edison 發表在 痞客邦 留言(27) 人氣()

求質數一直是數學家和程式設計者必經之路。最累人判斷n是不是質數的方式就是從2~(n-1) 一個一個除,只有要任何一個除得盡,就不是質數...

當然沒那麼可憐..

Edison 發表在 痞客邦 留言(3) 人氣()

最近在網路上有人提出一個問題,
使用者輸入二個數,並求這二個數之間所有的 "阿姆斯壯數"

Edison 發表在 痞客邦 留言(1) 人氣()