[問題] 指標的指標

作者: zzss2003 (brotherD)   2018-05-25 13:46:20
開發平台(Platform): Win7
編譯器: GCC
額外使用到的函數庫(Library Used): No
問題(Question): int **arr = (int**)malloc(c*sizeof(int))
程式碼(Code):https://ideone.com/e.js/kHRJmp
第八行(int **arr)做完小弟的理解是像這樣: https://imgur.com/a/d6kJniE
其中ABC因為還沒有給值,所以用變數表示。
當執行arr = (int**)malloc(c*sizeof(int*))
malloc所給予的是一個ptr,這個ptr是指向**int,所以這個ptr的value就會取代A所以圖就變成這樣(圖二): https://imgur.com/a/d6kJniE
問題:
1. malloc最後所allocate的大小是3*4bytes = 12bytes,但在我畫的圖中,B的size只有
4bytes,要如何放得下12bytes?
謝謝
作者: jerryh001   2018-05-25 15:32:00
你程式碼沒貼到
作者: cphe (魔鬼藏在垃圾筒裡)   2018-05-25 16:12:00
看不太懂你的問題… 然後你的圖只畫出一個其中兩個pointer但你的code不是長這樣阿~ 當然會跟你認知要allocate不一樣
作者: elements (Helianthus annuns)   2018-05-25 16:40:00
B的值是什麼意思?第八行跑完 就要一串陣列有c個int*大小的元素 這個陣列本身的位址會被放進你的變數那第八行沒有你想的那麼複雜 他就是一個指標大小的數值內容是亂數 型態是 int**,他指到的地方沒有意義,要等到下一行 malloc 才會給他有用的值
作者: wei115 (ㄎㄎ)   2018-05-25 17:27:00
第10行和11行 不是給了每一個arr[i] 一個c * sizeof(int)的記憶體空間了嗎?那為什麼B的大小會是4byte?B的大小應該要是 c*sizeof(int) 阿arr指向了3個(int *)大小的空間,每一個(int *) 指向4個(int)大小的空間 所以3 * 4 = 12個(int)大小的空間
作者: taies (akira)   2018-05-26 01:20:00
B是個int* 那sizeof(B)=sizeof(int*)也是很正常的吧sizeof(arr)=sizeof(int**)這情況應該也是4Byte不過指標大小看平台而定就是了

Links booklink

Contact Us: admin [ a t ] ucptt.com