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