Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在下面使用C的情况下,pNext指针是什么?_C_Pointers - Fatal编程技术网

在下面使用C的情况下,pNext指针是什么?

在下面使用C的情况下,pNext指针是什么?,c,pointers,C,Pointers,我本来希望它是从func1()返回的指向firstpara的指针,但我看到NULL。可以解释一下如何修复它以实际返回firstpara()指针吗?要更改指针,需要传递指向指针的指针,即对象**pNext。要更改函数内变量的值,请传递指针。因此,通过扩展,要更改函数内指针的值,请将指针传递给指针 func() { Object* pNext; func1(pNext); } func1(Object* pNext) { pNext = Segement->GetFi

我本来希望它是从func1()返回的指向firstpara的指针,但我看到NULL。可以解释一下如何修复它以实际返回firstpara()指针吗?

要更改指针,需要传递指向指针的指针,即
对象**pNext
。要更改函数内变量的值,请传递指针。因此,通过扩展,要更改函数内指针的值,请将指针传递给指针

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

func1(Object* pNext)
{
    pNext = Segement->GetFirstPara(0);
}
应该是

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

func1(Object** pNext) { *pNext = Segement->GetFirstPara(0); }
在c中,您需要:


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

void func1(Object **pNext)
{
  *pNext = Segment->GetFirstPara(0);
}
在C中++

func1(&pNext);
func1(Object** pNext) { *pNext = ... }
在这两种语言中,您的示例都会将未初始化的
对象*
传递给
func1
,后者会复制它,为副本赋值,然后返回。请注意,原始pNext永远不会被修改(如果您为变量使用不同的名称,这会有所帮助)


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

只允许C++参数为引用

func1(pNext);
func1(Object*& pNext) { pNext = ... }
这里发生的是按值传递参数和按引用传递参数之间的区别。C总是按值传递。为了返回值,该值需要是一个参考值(例如,对象**将对象*作为指针引用)。C++添加了参考参数(由AND表示)。
传递值只传递数据的副本,而不传递实际数据本身。这就是函数调用中使用的变量未在函数中更新的原因。

请在实例化pNext时初始化它。现在调试时它可能为空,但在字段中它将是0x12AbD468或其他。如果您进行了如下测试,请选择:

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

func1(Object*& pNext)
{
    pNext = Segement->GetFirstPara(0);
}
…你的程序会爆炸,用户会发疯,打电话给支持人员,不知何故得到了你的电话分机,直接打电话给你,给你一个电话

在您的情况下,由于“func1()”不使用pNext作为In参数,您只需从函数返回它:

if( NULL != pNext )
{
  pNext->DoSomething();
}

不完全是是地址运算符。是的,John在func1中修复了&pNext。我把它们弄错了方向。我已经很久没有用C了。
func()
{
  Object *pNext = func1();
}

Object* func1()
{
  return Segment->GetFirstPara(0);
}