指標特輯的介紹到此告一段落,其中我所介紹的大多都是用 C 語法去寫,部份很重要的我也附上 src code,其實還有一個課題是交給各位有心想學的 - 如果你真的聽得懂、看得懂的話,請試著把所有的例子都想成是 char* CharPtr,那麼你將會再更上一層..最後,將指標特輯的內容整理附上,請參閱...
01_指標初學請進- 指標與位址
02_陣列與指標關係
03_指標的指標
Edison 發表在 痞客邦 留言(4) 人氣(7,341)
這種錯誤常有人會犯:在副函式裡面使用指標配置了一個新的記憶體空間,最後把這個指標傳回給主程式。為什麼不行?如果這個問題不知道答案的話,請回到 CallByValue 詳細看一遍再回來看解說...
先看以下的 code 再做說明
原始碼
Edison 發表在 痞客邦 留言(2) 人氣(6,984)
關於這個問題之前有不少人提過,只是換個型式又出現而已。這部份沒有想像中那麼難,只是一樣要拿個紙筆畫一下圖就是了。這次我不多說,大家仔細看範例還有執行結果就知道是要幹嘛的了…
1. 原始碼
// ====================================
// FileName: Ptr1To2.cpp
// Author : Edison.Shih.
// Complier: VC 2008
Edison 發表在 痞客邦 留言(1) 人氣(5,703)

在 09_二維指標與陣列 - 動態配置 [m][n] 陣列 中我們有提到
如果每 malloc 一份 memory 但卻沒有釋放,
將造成 memory leak 問題,一般而言程式真的不好抓,
(特別是已經寫了四、五千行程式要更很麻煩)
Edison 發表在 痞客邦 留言(1) 人氣(1,820)
在進入這階段時,請先確定前八個階段都確定會了再下來會好些。另外,有篇文章請先看過...
[console] 一維陣列與指標
[console] 二維陣列基本介紹
[console] 二維陣列與指標
Edison 發表在 痞客邦 留言(5) 人氣(84,839)
對於之前”指標特輯”的前三篇文,在程式中讓人感覺實用意義並不大,接下來要說的全都是重點,如果前三篇文沒有看懂的人,請先回去看懂吧。
1. 為什麼要用動態記憶體:一般我們使用陣列時,你不可以隨時改變陣列的大小,陣列的大小在宣告時就已經確定。所以不可能會有像以下的程式碼出現
int N = 10;
int a[N]; // complier error
N = 20;
a[N]; // complier
Edison 發表在 痞客邦 留言(3) 人氣(109,427)
現在,要為各位介紹CallByReference進行SWAP的做法。先聲明,CallByReference是在C++才有的概念,不過由於現在Complier幾乎沒有單獨支援C不支援C++的, 所以就算用C語言去寫CallByReference還是可被接受。
我們前面有提過CallByValue和CallByAddress,不管是哪種方法,OS都會再次配置副函式引數所需的記憶體空間,但CallByReference是非常特別的方法,OS是直接跑到主函式a, b的位址直接進行運算,並沒有再配置額外的記憶體。所以也有人說,使用CallByReference的速度會比較快。CallByReference的寫法大致如下:
void swap(int &c, int&d){…..}
void main()
{
int a, b;
swap(a, b);
}
Edison 發表在 痞客邦 留言(3) 人氣(2,458)
接下來的這個其實不是我要說明,而是留給各位思考,這個問題並不會太難或是太複雜...現在再次考慮 SWAP_A 的副函式,只是我寫的方式換了
原本的:
// ====================================
void Swap_A(int *a, int *b)
{
int c;
c = *a;
*a = *b;
*b = c;
}
Edison 發表在 痞客邦 留言(3) 人氣(2,113)
這是一個討論很久的名詞問題。
void f(int *x)
{
printf("%d", *x);
}
int main()
{
int y=10;
f(&y);
return 0;
}
Edison 發表在 痞客邦 留言(4) 人氣(7,009)
現在,假設我要寫一個函數,這個函數是交換二個整數,也就是 a 的值給 b, b 的值給 a,該怎麼寫?這種問題是一般初學者最常犯的錯誤 – 使用 call by value。下面的例子說明了為什麼不能使用 call by value 的方式進行 swap 的動作。在看此例的執行結果時,手邊一樣先準備好紙跟筆,畫出各變數的記憶體位置及儲存值,對學習會很很大的幫助。
原始碼:
// ====================================
// FileName: CallByValue.cpp
// Author : Edison.Shih.
// Complier: VC 2008
Edison 發表在 痞客邦 留言(1) 人氣(3,086)