24

C 標準は、初期化されていない場合、グローバル変数と静的変数が常に であることを保証します0

これが私の質問です。初期化されていないグローバル変数と静的変数BSSは、プログラム内のセグメントに移動します。だから、いわゆる0はずですall-bit 0

整数変数の場合、all-bit 0として評価され0ます。IEEE 754に従っている場合、浮動小数点変数も0.0です。ただし、ポインターの場合、null ポインターは必ずしも である必要はありませんall-bit 0。グローバル ポインターの初期化も次のように行います。

int* p = NULL;

ただ違いを生む:

int *p;
4

2 に答える 2

19

標準では、静的ストレージ期間を持ち、他の初期化子を持たないポインターは、関係する可能性のあるビット パターンに関係なく、NULL ポインターに初期化されることが保証されています。

同じ基本的な考え方が浮動小数点型と整数型にも適用されます。これらは 0 または 0.0 に初期化されることが保証されています。実装は、BSS がすべてのビットを 0 に設定するという事実にこれを任せることができます。これは、そうすることで正しい値が得られることが「わかっている」場合に限られます。

于 2013-06-09T18:21:00.177 に答える