1

最後の行のパラメーターが関数の外部に影響を与えない理由:

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
}

ありがとう

4

2 に答える 2

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()

于 2013-06-16T12:41:08.453 に答える
0

変数saveframeをポインターとして渡しました。関数の外で値を変更するには、次のようにします。

*saveframe += savestride; 

代わりは。このようにして、関数が終了した後でも値が保持されるようになりました。

于 2013-08-24T06:34:39.813 に答える