1

次のプロトタイプを持つ関数がありますvoid init(int *argc,char**argv);が、プログラムでのこの関数の後続の呼び出しでは、そのような引数を提供する必要がないか、提供する必要さえありません。だから私はint_null(ああ、悪い名前、私は知っている)と呼ばれる変数を作成し、関数に渡しますinit(&int_null, NULL)NULL、標準では値がゼロであることに気付き、変数の代わりにそれを使用できint_nullます(この変数を作成しないようにするためだけに)それに従うinit(NULL,NULL)とうまくいきます。しかし、私は何か問題がありますか?一部の実装では、またはまたはNULLとして定義されていますが、それが問題になる可能性があると確信しています。関数はそれがゼロであることを理解する必要があります。(void*)000Largc

4

2 に答える 2

5
char **bla1 = (void *) 0;
char **bla2 = 0;
char **bla3 = 0L;

これらすべての割り当て (初期化は割り当てに従って行われます) は C で有効であり、同等です。

NULL予想される引数がint *or型の場合は、常に渡すことができますchar **

@R..がコメントに追加したように、この最後の文は真ですが、可変数の引数を受け入れる関数と、プロトタイプ化された (古いスタイルの) 構文で定義された関数は例外です。どちらの場合もキャストが必要です。

于 2013-01-12T17:02:30.420 に答える
2

NULL動作するはずです。両方とも0(void *)0C の任意のポインター型に割り当てることができます。

于 2013-01-12T17:00:38.567 に答える