»
遊客:
加入
|
登入
(帳號有問題請連絡TWed2k@gmail.com)
TWed2k
»
程式開發討論區
» [分享]C語言多維陣列傳輸至副程式的方法
可打印版本
|
推薦給朋友
|
訂閱主題
|
收藏主題
|
純文字版
論壇跳轉 ...
主題:
[C&C++]
[分享]C語言多維陣列傳輸至副程式的方法
字型大小:
小
|
中
|
大
|
巨
←
→
Adsmt
金驢友〔初級〕
大頭大頭,寒流不愁。你有綿被,我有毛頭。
. 積分:
2152
. 文章:
2920
. 收花: 19913 支
. 送花: 21590 支
. 比例: 1.08
. 在線: 4458 小時
. 瀏覽: 34203 頁
. 註冊:
6924
天
. 失蹤:
8
天
#1 : 2010-1-27 11:40 AM
全部回覆
送花
(8)
送出中...
還有 array pointers 和 pointers to array
array pointers, 這是比較常用的方法:
char *ar[10];
for( i = 1; i <= 10; i++)
ar[i-1] = (char *)malloc(sizeof(char)*i);
一個「陣列指標」的蓋念,就是由指標構成的陣列,所以每一個指標都可以指向一個「不等長度」的記憶體區段,這在使用上會比宣告固定的二維陣列靈活得多。
pointers to arrays 就是相反的概念了:
int (*abc)[10];
abc = (int (*)[])malloc(sizeof(int) * 5 * 10);
陣列的元素長度固定,但陣列數量不固定。
這兩個的差別,如果以中文來說的話,前者就是「指標的陣列」;後者則為「指向陣列群的指標群」。
舉例來說,前者相當於去訂做箱子,老闆叫你去訂做十個,但大小由你決定,每個箱子可以完全不同。
後者則是你去買箱子,老闆說他只剩下一種箱子,但數量很多,因此他問你需要多少個。
[Adsmt 在 2010-1-27 11:42 AM 作了最後編輯]
[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接
快速回覆
送出中...
Adsmt
金驢友〔初級〕
大頭大頭,寒流不愁。你有綿被,我有毛頭。
. 積分:
2152
. 文章:
2920
. 收花: 19913 支
. 送花: 21590 支
. 比例: 1.08
. 在線: 4458 小時
. 瀏覽: 34203 頁
. 註冊:
6924
天
. 失蹤:
8
天
#2 : 2010-1-27 11:54 AM
全部回覆
送花
(3)
送出中...
嚴格來說,陣列並不等於指標。
最簡單的例子:
char ar[10], *br;
br = ar;
printf("ar_addr=%p, br_addr=%p\n", ar, br);
printf("ar_addr=%p, br_addr=%p\n", &ar, &br);
這個程式印出很有趣的結果:
ar_addr=0xbfeedd92, br_addr=0xbfeedd92
ar_addr=0xbfeedd92, br_addr=0xbfeedd8c
我們可以看到指標 br 在 0xbfeedd8c 這個記憶體位置儲存了 0xbfeedd92 這個值。
但陣列 ar_addr 就有趣了,他是在0xbfeedd92這個記憶體位置儲存了 0xbfeedd92 這個值。
對系統而言,陣列是一個可用的記憶體區塊,而不是一個指標。如果你看他的 assembly code 就會發現兩者的不同。
不過在實際運用上大致是差不多。
[如果你喜歡本文章,就按本文章之鮮花~送花給作者吧,你的支持就是別人的動力來源]
本文連接
快速回覆
送出中...
快速回覆
表情符號
更多 Smilies
字型大小 :
小
|
中
|
大
|
巨
[完成後可按 Ctrl+Enter 發佈]
溫馨提示:本區開放遊客瀏覽。
選項:
關閉 URL 識別
關閉
表情符號
關閉
Discuz! 代碼
使用個人簽名
接收新回覆信件通知
發表時自動複製內容
[立即複製]
(IE only)
論壇跳轉 ...
所在時區為 GMT+8, 現在時間是 2024-4-27 04:39 PM
清除 Cookies
-
連絡我們
-
TWed2k
© 2001-2046
-
純文字版
-
說明
Discuz!
0.1
| Processed in 0.019299 second(s), 7 queries , Qzip disabled