什么场景下会**很有用?
在这个例子中,我们看到了一个函数PutNewObjectHere,它接受一个指向指针的指针作为参数。这个函数的目的是在传入的指针所指的位置创建一个新的对象。通过传递指向指针的指针,函数可以修改指针的取值,使其指向一个新创建的对象。
这种用法在某些情况下非常有用。例如,在初始化函数中,函数可能需要返回一个错误/成功值以及一个指针。通过传递指向指针的指针,函数可以在初始化成功时将新的处理程序对象赋值给指针,并返回一个成功值。
虽然这个例子中的代码有些简单,但在实际情况中,这种用法确实偶尔会出现。
解决方法是使用指向指针的指针作为函数参数。通过这种方式,函数可以修改指针的取值,使其指向新创建的对象。这样,函数可以在创建对象成功时将对象的地址赋值给指针,并返回一个成功值。
这种用法在某些情景下非常有用,特别是当函数需要返回一个指针以及一个额外的错误/成功值时。通过传递指向指针的指针,函数可以实现这一目标,并返回所需的结果。
什么情况下会用到指向指针的指针呢?一个情况是当你需要一个指向指针的指针时,例如,如果你想动态分配一个指针数组,使用new或malloc操作符将返回一个指向数组中第一个指针的指针。另一个用途是将指向指针的指针传递给函数,以便函数可以修改原始指针。在C++中,你可以通过引用传递,但在C中不行。
那么,为什么你会想要使用new操作符分配任何类型的数组呢?例如,为了分配一个char*数组?在StackOverflow上,我曾经得到过这样的建议:使用char的vector而不是使用new。当你需要x个指针,但你不知道需要多少个时,指向指针的指针就很方便了。还有一种情况是,在阅读教科书时,你需要检查新学到的知识,但还不足够聪明,不能使用vector。可能new是一个不好的选择,但在某些环境中,malloc是唯一可用的选择。
请注意,这个问题涉及C和C++。在C中,如果你需要一个动态大小的字符串数组,一个非常流行的方法是使用一个指向字符数组第一个元素的指针数组的第一个元素的指针。这样做可以得到一个指向指针的指针,即char**。