[問題] 指標的指標

看板C_and_CPP作者 (brotherD)時間6年前 (2018/05/25 13:46), 6年前編輯推噓3(3014)
留言17則, 5人參與, 6年前最新討論串1/3 (看更多)
開發平台(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? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.26.157 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1527227184.A.D85.html ※ 編輯: zzss2003 (60.248.26.157), 05/25/2018 14:05:34 ※ 編輯: zzss2003 (60.248.26.157), 05/25/2018 15:11:29 ※ 編輯: zzss2003 (60.248.26.157), 05/25/2018 15:17:09

05/25 15:32, 6年前 , 1F
你程式碼沒貼到
05/25 15:32, 1F
※ 編輯: zzss2003 (60.248.26.157), 05/25/2018 16:01:47 ※ 編輯: zzss2003 (60.248.26.157), 05/25/2018 16:02:23 ※ 編輯: zzss2003 (60.248.26.157), 05/25/2018 16:03:01

05/25 16:12, 6年前 , 2F
看不太懂你的問題… 然後你的圖只畫出一個其中兩個pointer
05/25 16:12, 2F

05/25 16:12, 6年前 , 3F
但你的code不是長這樣阿~ 當然會跟你認知要allocate不一樣
05/25 16:12, 3F
已更新內文,希望可以更明瞭,謝謝 ※ 編輯: zzss2003 (60.248.26.157), 05/25/2018 16:39:03

05/25 16:40, 6年前 , 4F
B的值是什麼意思?
05/25 16:40, 4F

05/25 16:42, 6年前 , 5F
第八行跑完 就要一串陣列有c個int*大小的元素 這個陣列
05/25 16:42, 5F

05/25 16:42, 6年前 , 6F
本身的位址會被放進你的變數
05/25 16:42, 6F
不好意思,已改內文,第8行只有執行int **arr ※ 編輯: zzss2003 (60.248.26.157), 05/25/2018 16:45:32 ※ 編輯: zzss2003 (60.248.26.157), 05/25/2018 16:46:23

05/25 16:48, 6年前 , 7F
那第八行沒有你想的那麼複雜 他就是一個指標大小的數值
05/25 16:48, 7F

05/25 16:48, 6年前 , 8F
內容是亂數 型態是 int**,他指到的地方沒有意義,要
05/25 16:48, 8F

05/25 16:48, 6年前 , 9F
等到下一行 malloc 才會給他有用的值
05/25 16:48, 9F
恩恩,這個我能了解,我的問題是卡在為什麼中間會多3個空間,因為照理說只有1個空間 ※ 編輯: zzss2003 (60.248.26.157), 05/25/2018 17:13:31

05/25 17:27, 6年前 , 10F
第10行和11行 不是給了每一個arr[i] 一個c * sizeof(int)
05/25 17:27, 10F

05/25 17:28, 6年前 , 11F
的記憶體空間了嗎?那為什麼B的大小會是4byte?
05/25 17:28, 11F

05/25 17:28, 6年前 , 12F
B的大小應該要是 c*sizeof(int) 阿
05/25 17:28, 12F

05/25 17:30, 6年前 , 13F
arr指向了3個(int *)大小的空間,每一個(int *) 指向4個
05/25 17:30, 13F

05/25 17:30, 6年前 , 14F
(int)大小的空間 所以3 * 4 = 12個(int)大小的空間
05/25 17:30, 14F

05/26 01:20, 6年前 , 15F
B是個int* 那sizeof(B)=sizeof(int*)也是很正常的吧
05/26 01:20, 15F

05/26 01:23, 6年前 , 16F
sizeof(arr)=sizeof(int**)這情況應該也是4Byte
05/26 01:23, 16F

05/26 01:23, 6年前 , 17F
不過指標大小看平台而定就是了
05/26 01:23, 17F
文章代碼(AID): #1R1wCms5 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1R1wCms5 (C_and_CPP)