通过引用C中的指针

时间:2014-10-30 09:42:26

标签: pointers struct reference

void foo(structT* P){
   P = P->next;
   return;
}
void func(structT* P){
   foo(P);
   return 0;
}

在func()中,它调用传递指针的foo(P)。在foo()中,P得到更新。现在,如何在func()中获取更新的值?在这种情况下,如何在C中使用传递引用?

2 个答案:

答案 0 :(得分:2)

没有进一步判断这对于你的真实世界设计是否是一个好主意(foo函数根据定义具有未指定的目的;只需注意变异输入参数通常不是一个好主意),这里是一个快速的解。

你不能在C.但你可以传递指针指针:

void foo(structT** P){
   *P = (**P).next; // or "(*P)->next"
   return;
}
void func(structT* P){
   foo(&P);
   return 0;
}

来自http://c2.com/cgi/wiki?ThreeStarProgrammer的轶事和警告:

  

三星级程序员

     

C程序员的评级系统。你的指针越间接(即你的变量之前的“*”越多),你的声誉就越高。没有明星的C程序员几乎不存在,因为几乎所有非平凡的程序都需要使用指针。大多数是一星级程序员。在过去(好吧,我很年轻,所以这些看起来至少对我而言),偶尔会找到一个由三星级程序员完成的代码并且敬畏地颤抖。

     

有些人甚至声称他们在不止一个间接层面上看到了涉及函数指针的三星代码。听起来像UFO一样真实。

     

要明确的是:被称为三星程序员通常不是一种恭维。

答案 1 :(得分:1)

structT* foo(structT* P)
{
   if ( P != NULL )
       return P->next;
   else
       return NULL;
}

void func(structT* P){
   structT* P1 = foo(P);
}