function参数的赋值在函数外没有任何影响

为什么最后一行参数可能在函数外没有影响:

void save_last_frame( uint8_t *saveframe, uint8_t *curframe, int width, int height, int savestride, int curstride ) { height /= 2; height--; while( height-- ) { blit_packed422_scanline( saveframe, curframe, width ); saveframe += savestride; interpolate_packed422_scanline( saveframe, curframe, curframe + (curstride*2), width ); saveframe += savestride; curframe += (curstride*2); } blit_packed422_scanline( saveframe, curframe, width ); saveframe += savestride; blit_packed422_scanline( saveframe, curframe, width ); saveframe += savestride; // <-- Assignment of function parameter has no effect outside the function } 

谢谢

在C中,参数本质上是局部变量,它们使用作为参数传入的值进行初始化。 这意味着只有在执行函数时它们才存在。 一旦函数存在,您的saveframe变量就不再存在,并且它与您指定的值一起存在。

为了修改函数外部存在的值,您应该使用指针并修改该指针指向的值。

由于您正在使用的值已经是指针,因此您应该使用指向指针的指针:

 void save_last_frame( uint8_t **saveframe, uint8_t **curframe, int width, int height, int savestride, int curstride ) 

然后,您应该相应地修改代码,将saveframe替换为*saveframe 。 类似于curframe如果你也希望它由函数更新。

这种“输出指针”参数的一个例子是endptr用于在strtol()记录解析数字字符串的结尾。

您已将变量saveframe作为指针传递; 要更改函数外的值,请执行以下操作:

 *saveframe += savestride; 

代替。 这样,即使在函数退出后,您的值也将保留。