2016-11-12 142 views
0

我有一个函数接受两个指针参数。比方说这是函数内使用指针调用函数 - C

void add(u16 *x, u16 *y) 

而且我有另一个接受三个指针参数的函数。

void fact(u16 *a, u16 *b, u16 *c){ 
    if(*c > 500){ 
     add(*a,*b); // Is this correct? 
    } 
} 

如果实际上在一定条件被满足,我要的参数a和b传递给函数添加,但我想通过引用传递它们,而不是价值。我该如何做到这一点?在调用函数时,a,b,c,x和y全部从“main”向下传递,使用“& x”。

所以我希望一切都通过引用传递下去,以便任何值修改都会返回到main。

非常感谢!

回答

1

add(* a,* b); // 它是否正确?

不,这是不正确的。

如果原型是void add(u16 *x, u16 *y),那么调用函数应该调用匹配类型的参数。在fact()ab已经指针,所以正确的代码应该是这样的:

void fact(u16 *a, u16 *b, u16 *c){ 
    if(*c > 500){ 
     add(a,b); // this is correct 
    } 
} 
1

不,这是不正确的。我个人发现,如果您在类型旁边写上*而不是变量名,就会更容易理解。

您的功能add有两个参数,都是指向u16的指针,即它们是u16*。在您的fact中,您有三个变量,全部为u16*。类型匹配,所以你需要调用它为:

add(a, b); 

然后你通过值,这相当于通过引用传递的实际整数值传递指针。您可以在需要时将指针传递给指针,但不如按值传递指针那么普遍。