为什么最后一行参数可能在函数外无效:
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
}
由于
答案 0 :(得分:1)
在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()
中已解析数字字符串的结尾。
答案 1 :(得分:0)
您已将变量saveframe
作为指针传递;要更改函数外的值,请执行以下操作:
*saveframe += savestride;
代替。这样,即使在退出功能后,您的值也会保留。