適切に実行するためにヌル ポインターを使用する必要があるアプリケーションの例は? null ポインターをチェックしてテストを行うだけではカウントされません。この例は、C プログラマーによって「一般的に使用される」と想定されています。
もう少し考えた後、考えられる例が1つありますが、応答に影響を与えたくありません(まだ)。
編集: この質問は、C の知識を必要とするプログラミングの仕事の面接でしたが、神のようなスキルは必要ありません。答えは、言語の難解な側面ではありません。
この関数strtok()
は、2回目以降の反復でNULLに依存します。そのようにそのより良い振る舞いの親戚strtok_r()
とstrtok_s()
。
わずかに異なる強調:
などの文字列検索関数は、検索するように要求したものが見つからない場合にNULLポインタstrchr()
を返します。strstr()
メモリ割り当て関数は、割り当てが失敗したときにNULLポインタを返します。
このfopen()
関数は、ファイルを開くことができない場合にNULLポインターを返します。
このopendir()
関数は、ディレクトリのオープンに失敗するとNULLポインタを返します。
ここでテーマに気づきましたか?多くの場合、エラー表示としてNULLポインターが返されます。それが「チェックするだけ」としてカウントされるかどうかは、おそらくもっと議論の余地があります。
execvp
ファミリ関数は、引数リストが null ポインターで終了することを想定しています。例えば、
execvp("/bin/ls", arguments);
ここでarguments
は NULL で終了する必要があります。
リンクリスト。
struct node
{
int data;
node* next;
}
最後のポインタは常にでなければなりNULL
ませんよね?そうでない場合、プログラムは正しく実行されません。これはテストとしてカウントされる可能性がありますが、プログラムを適切に実行するために必要です。考え?
NULL
に安全に渡される可能性があるため、次のコード内でポインタが-edされる場合とされない場合に、free()
ポインタを初期化すると便利なことがよくあります。その後、ポインタが実際に使用されたかどうかに関係なく、たとえば関数の最後で、たとえば、安全に呼び出すことができます。NULL
malloc()
free()
int * p = NULL; // NB: without this initialisation we would need additional logic
// to know whether to call free(p) or not later...
...
if (...)
{
...
if (...)
{
...
p = malloc(42);
...
}
...
}
...
free(p); // free allocated memory, or no-op if p == NULL
頭のてっぺんから:
strtok
て、最初のトークンの後に連続するトークンを取得します。exec*
関数の引数リストを終了しますrealloc
初期割り当てに使用NULL 値は、ある値の「終了」または「存在しない」ことを示すのに明らかに非常に役立ちます。たとえば、関数内のオプションの引数は NULL で示されます。または「まだ割り当てられていません...」。
しかし、NULL 値は参照としては役に立ちません。比較以外の目的で NULL 値を使用したり、ポインターが不要な場合に代入したりすることは決して正しくありません [明らかに、ポインターが適切に解放されていると仮定します]。
私は、オペレーティング システムの起動の早い段階で実行されるコードの一部に取り組んでいます。後でコードを実行すると、いくつかの場所で現在のタスクが必要になります。ただし、システムが正常に起動する前は、現在のタスクはありません。したがって、「現在のタスクはありません」と示す必要があります。NULL ポインター [そして、ポインターが NULL の場合は、関連する「予約済み」データ構造にアクセスする] と変数を組み合わせて、タスクが作成されたかどうかを確認します。[これは非常に単純化されていますが、概念は当てはまります]。
技術的には、MS-DOS (または「リアル モード」の他の 8086) では、ゼロ除算のベクトルを設定するために NULL ポインタも使用されます [これは「ベクトル ゼロ」であり、ベクトル テーブルはアドレス ゼロにあります。ヌル]。しかし、最新の OS には [通常] 他の場所に割り込みベクトル テーブルがあり、ゼロのアドレスは通常、読み取り/書き込み操作から保護されているため、ポインターの「有効な使用」ではなくなりました。もちろん、他の組み込み型システムの中には、「意味のある」何かのためにアドレス 0 を使用するものもあります。