[问题] 指标的指标

楼主: 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