C 語言講座: 5.7 陣列與指標的不同

文章推薦指數: 80 %
投票人數:10人

我們可以把陣列想成是你銀行戶頭裡的現金,指標則是提款卡,空有提款卡而戶頭裡沒有現金是不能領出錢來的,同樣地空有指標而沒有實際可用的記憶體仍然不能存放資料。

許多 ... 發信人:[email protected]. (athena),信區:test 標 題:星星流講座0031 發信站:☆清華電機☆(WedJun2115:47:481995) 轉信站:star 星星流講座0031        C語言教室 第5講之7           陣列與指標                        Topic:Differencebetweenarrayandpointer 前面我們提到註標[]相當於指標的引用,例如:        a[1]相當於*(a+1) 那麼,如此說來,a[1]也相當於*(1+a),也就是我可以用        1[a] 來代表a[1]?看起來很奇怪,請你執行一下下面的程式: /*strange.c*/ #include voidmain(void) {    inta[10];    1[a]=1;    printf("%d%d%d\n",a[1],*(a+1),1[a]); } 執行結果: 111 但是,既然指標這麼好用的話,我們直接定義一個指標來用就好,為什 麼要大費周章宣告一個陣列來儲放資料呢?我直接利用指標不就得了? 事實上,宣告一個陣列的同時,電腦就會配置與該陣列等量大小的記憶 體供陣列使用。

我們可以把陣列想成是你銀行戶頭裡的現金,指標則是 提款卡,空有提款卡而戶頭裡沒有現金是不能領出錢來的,同樣地空有 指標而沒有實際可用的記憶體仍然不能存放資料。

許多坊間的書籍誤導讀者以為char*就是字串,這是完全錯誤的觀念。

字串是字元陣列,不是字元指標,我們平常是為了操作上的方便才 使用指向字元陣列的指標來操作字串。

如果不定義字元陣列,隨便將一個字元指標指向字串會發生什麼結果呢? 請你執行一下下面的程式: /*danger.c*/ #include #include voidfoo(void); char*danger; voidmain(void) {    foo();    printf("%s\n",danger); } voidfoo(void) {    strcpy(danger,"Danger!"); } 執行結果:(我們的老朋友) Segmentationfault(coredumped) 如果把char*danger;改成了chardanger[20];又會如何? 請你自己動手試試。

-- 本文原作者為徐振家,原作刊載於星星神教總壇☆清華電機☆test板。

你可以以電子文件的形式將本文自由流傳於台灣學術網路,但必須包含此版權聲明。

原作者依中華民國著作權法之規定,享有本文之著作權,請勿抄襲以免觸法。

未經授權任何人不得以任何形式對本文做任何修改及商業上之應用。

其他網路的轉載或其他用途的應用,請先知會作者,並取得其同意。

對本文有任何疑問或意見請mail給[email protected],謝謝。

 



請為這篇文章評分?