[問題] C上三種陣列宣告問題
開發平台(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
03/25 23:04, 1F
→
03/25 23:04, , 2F
03/25 23:04, 2F
→
03/25 23:05, , 3F
03/25 23:05, 3F
推
03/25 23:06, , 4F
03/25 23:06, 4F
→
03/25 23:06, , 5F
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
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
03/26 01:08, 7F
謝謝你,非常有幫助!
※ 編輯: wheels 來自: 140.112.28.212 (03/26 01:46)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章