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;
代替。 这样,即使在函数退出后,您的值也将保留。