目前分類:指標特輯 (13)

瀏覽方式: 標題列表 簡短摘要

指標特輯的介紹到此告一段落,其中我所介紹的大多都是用 C 語法去寫,部份很重要的我也附上 src code,其實還有一個課題是交給各位有心想學的 - 如果你真的聽得懂、看得懂的話,請試著把所有的例子都想成是 char* CharPtr,那麼你將會再更上一層..最後,將指標特輯的內容整理附上,請參閱...

01_指標初學請進- 指標與位址

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

這種錯誤常有人會犯:在副函式裡面使用指標配置了一個新的記憶體空間,最後把這個指標傳回給主程式。為什麼不行?如果這個問題不知道答案的話,請回到 CallByValue 詳細看一遍再回來看解說...

先看以下的 code 再做說明

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

關於這個問題之前有不少人提過,只是換個型式又出現而已。這部份沒有想像中那麼難,只是一樣要拿個紙筆畫一下圖就是了。這次我不多說,大家仔細看範例還有執行結果就知道是要幹嘛的了

1. 原始碼

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

在 09_二維指標與陣列 - 動態配置 [m][n] 陣列 中我們有提到

如果每 malloc 一份 memory 但卻沒有釋放,

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

在進入這階段時,請先確定前八個階段都確定會了再下來會好些。另外,有篇文章請先看過...

[console] 一維陣列與指標

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

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

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) 人氣()