關於C語言陣列的問題!! |
尚未結案
|
kenken
一般會員 發表:12 回覆:28 積分:8 註冊:2003-05-15 發送簡訊給我 |
就是啊,我做一個反轉一維矩陣內的值,在convert函式裡,就是a[i]=b[i]這一行,他已經把原本陣列a裡的東東給翻轉過來了,但在主程式裡最後一個print_matrix(data),當他在呼叫data時,怎麼不是原本的data,而是陣列a的值,那這樣的話,不就是違反了區域變數的規則了嗎?我太笨了,希望有人可以教教我!!謝謝大家的幫忙!! #include
|
tech_state
版主 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
引言: 就是啊,我做一個反轉一維矩陣內的值,在convert函式裡,就是a[i]=b[i]這一行,他已經把原本陣列a裡的東東給翻轉過來了,但在主程式裡最後一個print_matrix(data),當他在呼叫data時,怎麼不是原本的data,而是陣列a的值,那這樣的話,不就是違反了區域變數的規則了嗎?我太笨了,希望有人可以教教我!!謝謝大家的幫忙!! #include |
kenken
一般會員 發表:12 回覆:28 積分:8 註冊:2003-05-15 發送簡訊給我 |
|
tech_state
版主 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
引言: 版主,先謝謝你一下! 所以就是把陣列當作引數時,並沒有區域和全域變數的問題,是這樣子的嗎? 再謝謝版主!!kenken, 您好 並不是這樣喔! 以下列了幾篇有關呼叫函式的資料供您參考。 http://imil.au.edu.tw/~hsichcl/TurboC/C_Unit7.htm http://www.takka.com.hk/intropg/pgch11/c11p4.htm http://www.takka.com.hk/intropg/pgch6/c6p1.htm ======================= 涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。 是非終日有,不聽自然無 天下本無事,庸人自擾之 發表人 - tech_state 於 2003/05/19 17:23:59 |
kenken
一般會員 發表:12 回覆:28 積分:8 註冊:2003-05-15 發送簡訊給我 |
|
Royce520
高階會員 發表:18 回覆:157 積分:100 註冊:2002-09-13 發送簡訊給我 |
kenken 你好,
終於在你跟 tech_state 的討論中, 確知你的問題了
------
不要忘記呼吸,不要忘記編程! ∩__∩ |
kenken
一般會員 發表:12 回覆:28 積分:8 註冊:2003-05-15 發送簡訊給我 |
感謝各位的熱心回答。 是不是當我們傳遞一般的變數名稱到函數時,接收的函數會將參數的內容給copy 一分,放在函數所使用的記憶体中,就像是函數裡的區域變數一樣,當函數結束 時,原先在其他區段裡的變數並不會更改其值! 而傳遞的引數是陣列時,由於陣列的長度可能很大,為了避免記憶体空間的不 足,所以當初在設計一C語言時,就泆定當陣列為引數時,就不用像一般的引數 一樣,將陣列copy一份,也就是說,當陣列為引數特,傳遞到函數中的是該陣列 實際的位址!! 不知這樣子說,對不對??
感謝二位!!
|
Royce520
高階會員 發表:18 回覆:157 積分:100 註冊:2002-09-13 發送簡訊給我 |
|
tech_state
版主 發表:44 回覆:638 積分:641 註冊:2003-02-10 發送簡訊給我 |
看來還是Royce520前輩比較厲害,
我的表達能力與文筆皆不好,
所以只能找找資料看看是否能幫幫kenken,
現在再加上Royce520前輩的解說,
相信對kenken的幫助更大了,
kenken的領悟力也很好,加油喔!
如果完全了解後,也可以用您的想法將資料整理一份,
與大家分享您的學習心得,
以方便有需要的會員朋友查詢。 =======================
<>涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。>
<>是非終日有,不聽自然無>
<>天下本無事,庸人自擾之>
|
kenken
一般會員 發表:12 回覆:28 積分:8 註冊:2003-05-15 發送簡訊給我 |
|
kenken
一般會員 發表:12 回覆:28 積分:8 註冊:2003-05-15 發送簡訊給我 |
|
kenken
一般會員 發表:12 回覆:28 積分:8 註冊:2003-05-15 發送簡訊給我 |
引言: 看來還是Royce520前輩比較厲害, 我的表達能力與文筆皆不好, 所以只能找找資料看看是否能幫幫kenken, 現在再加上Royce520前輩的解說, 相信對kenken的幫助更大了, kenken的領悟力也很好,加油喔! 如果完全了解後,也可以用您的想法將資料整理一份, 與大家分享您的學習心得, 以方便有需要的會員朋友查詢。 ======================= <>涵養怒中氣。謹防順口言。留心忙裡錯。珍惜有時錢。> <>是非終日有,不聽自然無> <>天下本無事,庸人自擾之> >>< face="Verdana, Arial, Helvetica"> 如果全會的話,一定會上來幫助一些網友的,分享一些經驗!! |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
... 插個話 ... 原函式
void convert(int a[]);
已表示,將一個整數陣列指標傳入,而在傳入後,在 convert 函式可以對 a[] 做讀寫的動作。如果 a[i] 的數值修改了,那叫用它所傳入的陣列自然就會被修改了,如果你不希望輸入的指標被 convert 修改,那可以改用
void convert(const int a[]);
這樣的宣告表示 convert 函式只能對 a[] 陣列讀取,不能寫入,如:
void convert(const int a[]) { int b[SIZE]; for(int i=0;i<SIZE;i ) // 反轉矩陣內的值 b[i]=a[SIZE-i-1]; for(int i=0;i<SIZE;i ) // a[i]=b[i]; // <--- Compile 時就會 ERROR! // E2024 Cannot modify a const object }在 compile 時就會發生錯誤! 在 ANSI C/C 的標準函式庫中,我們常常可以看到叫用函式的某參數都會加上 const 的字樣,其所代表的就是,您所輸入的參數(陣列)的內容不會被叫用的函式修改! 我們自己在寫函式時,通常不會想到要將「純讀取」的參數加上 const,可能是覺得太麻煩吧 不過,加上去的好處是,如果您的函式寫錯,在 > <>沒空更新的網頁... href="http://dllee.adsldns.org">http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell.... 發表人 - dllee 於 2003/05/20 09:16:28
------
http://www.ViewMove.com |
kenken
一般會員 發表:12 回覆:28 積分:8 註冊:2003-05-15 發送簡訊給我 |
引言: ... 插個話 ... 原函式 void convert(int a[]); 已表示,將一個整數陣列指標傳入,而在傳入後,在 convert 函式可以對 a[] 做讀寫的動作。如果 a[i] 的數值修改了,那叫用它所傳入的陣列自然就會被修改了,如果你不希望輸入的指標被 convert 修改,那可以改用 void convert(const int a[]); 這樣的宣告表示 convert 函式只能對 a[] 陣列讀取,不能寫入,如:也感謝dllee大大的教學,讓我又多學到了一招!! 努力的向各位前輩們學習學習!!void convert(const int a[]) { int b[SIZE]; for(int i=0;i發表人 - dllee 於 2003/05/20 09:16:28 |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |