次のプロトタイプを持つ関数がありますvoid init(int *argc,char**argv);
が、プログラムでのこの関数の後続の呼び出しでは、そのような引数を提供する必要がないか、提供する必要さえありません。だから私はint_null
(ああ、悪い名前、私は知っている)と呼ばれる変数を作成し、関数に渡しますinit(&int_null, NULL)
がNULL
、標準では値がゼロであることに気付き、変数の代わりにそれを使用できint_null
ます(この変数を作成しないようにするためだけに)それに従うinit(NULL,NULL)
とうまくいきます。しかし、私は何か問題がありますか?一部の実装では、またはまたはNULL
として定義されていますが、それが問題になる可能性があると確信しています。関数はそれがゼロであることを理解する必要があります。(void*)0
0
0L
argc
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 *)0
C の任意のポインター型に割り当てることができます。
于 2013-01-12T17:00:38.567 に答える