在下面的例子中,使用C时pNext指针会是什么?

pra*_*een 3 c pointers

func()
{
    Object* pNext;
    func1(pNext);
}

func1(Object* pNext)
{
    pNext = Segement->GetFirstPara(0);
}
Run Code Online (Sandbox Code Playgroud)

我期待它是从func1()返回的firstpara的指针,但我看到NULL可以解释一下,如何修复它实际返回firstpara()指针?

Dia*_*ism 16

仅对于C++,您可以将参数作为参考

func()
{
    Object* pNext;
    func1(pNext);
}

func1(Object*& pNext)
{
    pNext = Segement->GetFirstPara(0);
}
Run Code Online (Sandbox Code Playgroud)

这里发生的是按值传递参数和通过引用传递之间的区别.C总是按值传递.为了获得值,该值必须是参考值(例如,Object**将Object*称为指针).C++添加了引用参数(由&表示).按值传递仅传递数据的副本,而不传递实际数据本身.这就是函数调用中使用的变量未在函数中更新的原因.


ejg*_*ttl 5

在c中,您需要:

func1(&pNext);
func1(Object** pNext) { *pNext = ... }
Run Code Online (Sandbox Code Playgroud)

在C++中

func1(pNext);
func1(Object*& pNext) { pNext = ... }
Run Code Online (Sandbox Code Playgroud)

在任何一种语言中,您的示例都会将未初始化的内容传递Object*给它func1,它会复制它,为副本分配值然后返回.请注意,原始的pNext永远不会被修改(如果您为变量使用不同的名称,这将有所帮助).

在两种语言中,如果需要传递引用而不是传递值,则需要显式传递引用.