[問題] C上三種陣列宣告問題

看板C_and_CPP (C/C++)作者時間12年前 (2014/03/25 22:56), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 以下三者種宣告完的printf("%d", sizeof(a))會顯示多少? 程式碼(Code):(請善用置底文網頁, 記得排版) 1. int *a[5]; 2. int (*a)[5]; 3. int (*a[5]); 實際跑過後發現是20, 4, 20 想請問一下此三種狀況底下的a各代表什麼呢? 我個人理解1.的a是代表指向5個int pointer的array的第一個element的pointer, 但是這樣應該是4... 2.3因為孤陋寡聞沒看過這樣宣告,希望能有人能幫忙回答, 非常感謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.28.212 ※ 編輯: wheels 來自: 140.112.28.212 (03/25 23:04)

03/25 23:04, , 1F
假設 sizeof(指標) 都是 4
03/25 23:04, 1F

03/25 23:04, , 2F
1. sizeof(int *) * 5 = 4 * 5 = 20
03/25 23:04, 2F

03/25 23:05, , 3F
2. sizeof( int(*)[5]) = sizeof(指標) = 4
03/25 23:05, 3F

03/25 23:06, , 4F
1=3. array of pointer 2.pointer to array(5 int)
03/25 23:06, 4F

03/25 23:06, , 5F
3. sizeof(int *) * 5 = 4 * 5 = 20
03/25 23:06, 5F
先感謝樓上兩位回應, 我想與兩位進一步討論一下a代表的意義是什麼? 就我來看1. = 3.之中的a為一個指向int*組成的array中第一個element的pointer 這樣sizeof(a)不應該是a嗎@@? 還是說sizeof(a)會直接把整個a array的所有空間都return呢? 那2.中的a看兩位說起來似乎跟我理解的1. 一樣是個pointer to array的第一個element 有點混亂中@@" 先謝謝了 ※ 編輯: wheels 來自: 140.112.28.212 (03/25 23:21)

03/25 23:25, , 6F
1 跟 3 的 a 是陣列 "不是" 指標.
03/25 23:25, 6F
嗯...可是我記得如果是像int arr[3] = {10, 20, 30}這樣的靜態宣告下, *arr = 0會讓整個array變成{0, 20, 30} 我以為這樣是代表arr是個指到{10, 20, 30}中10這個元素的pointer 是我之前就弄錯了嗎@@? ※ 編輯: wheels 來自: 140.112.28.212 (03/25 23:41) 自己歸納了一下,看來應該是我弄錯了, arr代表的是array但具有10這個element的位址值的struct ※ 編輯: wheels 來自: 140.112.28.212 (03/26 00:35)

03/26 01:08, , 7F
建議看看 CodeProject 的這篇文章 http://goo.gl/szsaFQ
03/26 01:08, 7F
謝謝你,非常有幫助! ※ 編輯: wheels 來自: 140.112.28.212 (03/26 01:46)
文章代碼(AID): #1JCPaiJc (C_and_CPP)
文章代碼(AID): #1JCPaiJc (C_and_CPP)