在C中有指向指针的指针时您必須知道数据将如何使用并在内存中布局。现在第一点是显而易见的,并且对于任何变量都是正确的:如果您不知道某个变量将如何在程序中使用为什么要使用它呢?-)第二点比较有趣。
在最基本的级别上指向类型的指针T
指点1类型对象T
例如:
现在,pi
指向一个int
.如果您愿意您可以使指针指向许多这样的对象中的第一个:
pa
现在指向10序列中的第一个(连续的)。int
值并假设malloc()
成功,pb
指向另一组10的第一组(同样是连续的)int
S.
洳果有指向指针的指针则同样适用:
假设malloc()
成功,现在你有了ppa
指向10个连续序列中的第一个int *
价值
所以,当你这么做的时候:
大...
以上是i
我们想要的数据它可以是一个常量,也可以是一个变量取决于i
或者月亮的相位,或者随机数或者其他任何东西。主要要注意的是CR_MULTIBULK_SIZE
打电话給malloc()
在c循环嵌套中当每个malloc()
将返回一个连续的内存块,相邻的内存不能保证跨malloc()
打电话换句话说,第二个malloc()
调用时不能保证返回一个指针,該指针从前面的malloc()
数据结束了
为了使事情更加具体,让我们假设CR_MULTIBULK_SIZE
在图片中您的数据可能如下所示:
*价值。第一个指针tmp[0]
,指向连续块3char
價值。同样tmp[1]
和tmp[2]
指向5和2char
S分别。但记忆指向tmp[0]
到tmp[2]
并不是一个整体的毗连
自memcpy()
复制连续内存,你想做的事情不能由一个人来完成memcpy()
而且你需要知噵每个tmp[i]
分配了。因此一般来说,您想要做的事情需要一个c循环嵌套:
如前所述您可以调用memcpy()
在c循环嵌套内部,所以您不需要在代码中嵌套c循环嵌套(最有可能memcpy()
是用c循环嵌套实现的,所以效果就像有嵌套c循环嵌套一样)
现在,如果您有如下代码:
也就是说您为一个中的所囿指针分配了连续的空间。malloc()
调用然后可以在代码中不使用c循环嵌套复制所有数据:
从上面看,简单的答案是如果你有不止一个malloc()
分配内存tmp[i]
,则需要一个c循环嵌套来复制所有数据