http://c-faq.com/misc/hexio.htmlの例を考えると、「静的な」文字バッファへのポインタを追加する理由は何ですか? retbuf
と一緒に逃げることができないのはなぜですか?なぜ機能に「静的」な定義がありますか?
答えて
変更するアドレスを保存できるようにポインタが必要です。 retbuf
の場合は、変更するインデックス変数を使用するように関数を設計する必要があります。例えば:配列がポインタでない
int ind = sizeof(retbuf)-1;
retbuf[ind] = '\0';
等
注意。配列は固定サイズのメモリ領域です。ポインタはアドレスです。
ありがとう、入力しても、私はまだそれを完全に取得しません。上のリンクからこのスニペットを考えてみましょう。 static char retbuf [33]; char * p; p =&retbuf [sizeof(retbuf)-1]; ポインタ 'p'を 'retbuf'に追加する必要があるのはなぜですか?私たちが 'retbuf'を記入して関数から返すと( 'return retbuf')、それは常にバッファの最初の要素を指しています。間違っていますか? – Mark
@マークでは、最初に 'p'は' retbuf'の最初の要素と同じに終わるとは限りません。簡単な例として、 'num'が0の場合、' p'は 'retbuf + sizeof(retbuf)-1 'のままです。次に、関数の実行中にpを使用して、書き込む場所を追跡します。 –
ああ、私は今それを参照してください。私はコードを見るときにはもっと慎重にすべきだった。 Matthewありがとう! – Mark
static
キーワードがないと、バッファはスタックに割り当てられ、関数が呼び出し元に返されるまでに割り当てが解除されます。
static
を使用すると、関数が返された後にバッファが有効になります。
私は彼がなぜ単に 'retbuf'ではなく' p'が必要なのかと尋ねていると思っていました。 –
はい、問題は混乱しています –
'static'キーワードが必要な理由、あるいは' retbuf'を指すポインタ 'char * p'があるのはなぜですか? –