作者zzss2003 (brotherD)
看板C_and_CPP
标题[问题] 指标的指标
时间Fri May 25 13:46:20 2018
开发平台(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://webptt.com/cn.aspx?n=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
1F:推 jerryh001: 你程式码没贴到 05/25 15:32
※ 编辑: 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
2F:推 cphe: 看不太懂你的问题… 然後你的图只画出一个其中两个pointer 05/25 16:12
3F:→ cphe: 但你的code不是长这样阿~ 当然会跟你认知要allocate不一样 05/25 16:12
已更新内文,希望可以更明了,谢谢
※ 编辑: zzss2003 (60.248.26.157), 05/25/2018 16:39:03
4F:→ elements: B的值是什麽意思? 05/25 16:40
5F:→ elements: 第八行跑完 就要一串阵列有c个int*大小的元素 这个阵列 05/25 16:42
6F:→ elements: 本身的位址会被放进你的变数 05/25 16:42
不好意思,已改内文,第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
7F:→ elements: 那第八行没有你想的那麽复杂 他就是一个指标大小的数值 05/25 16:48
8F:→ elements: 内容是乱数 型态是 int**,他指到的地方没有意义,要 05/25 16:48
9F:→ elements: 等到下一行 malloc 才会给他有用的值 05/25 16:48
恩恩,这个我能了解,我的问题是卡在为什麽中间会多3个空间,因为照理说只有1个空间
※ 编辑: zzss2003 (60.248.26.157), 05/25/2018 17:13:31
10F:推 wei115: 第10行和11行 不是给了每一个arr[i] 一个c * sizeof(int) 05/25 17:27
11F:→ wei115: 的记忆体空间了吗?那为什麽B的大小会是4byte? 05/25 17:28
12F:→ wei115: B的大小应该要是 c*sizeof(int) 阿 05/25 17:28
13F:→ wei115: arr指向了3个(int *)大小的空间,每一个(int *) 指向4个 05/25 17:30
14F:→ wei115: (int)大小的空间 所以3 * 4 = 12个(int)大小的空间 05/25 17:30
15F:→ taies: B是个int* 那sizeof(B)=sizeof(int*)也是很正常的吧 05/26 01:20
16F:→ taies: sizeof(arr)=sizeof(int**)这情况应该也是4Byte 05/26 01:23
17F:→ taies: 不过指标大小看平台而定就是了 05/26 01:23