2016-11-01 3 views
-1

が、私は基本的なものになる可能性があるか、何を、私はまだ私が書く場合など配列に値を格納して初期化していますか?

ため

を何が起こるかを把握することはできませんよ

char temp[3]=""; 

または

char temp[3]={0}; 

char temp[3]={}; 

または

char temp; 

4つのすべてのケースでは、初期化されますか。

0が格納されている場合はASCII値として保存されますか?

また、NULLの場合は、格納されているASCII値もあります。

いくつかの要素が宣言されていない場合は、彼らが

ごみ値か何かを持っている価値行う最初の3が等価であると配列がゼロに初期化されます

答えて

2

1)

char temp[3]=""; 

char temp[3]={0}; 

等価です。配列tempは3つのゼロで埋められます。それはあなたが持っていたかのようです:char temp[3] = {0, 0, 0};

2)

char temp[3]={}; 

はC.空イニシャライザで違法では

char temp; 

これを、tempが宣言される場所に依存C.

3)で許可されていません。

ブロックスコープ内にある場合、tempは初期化されず、その値は不確定です。
ファイルスコープの場合、tempは0以外の定義がない限り、0に初期化されます。。あなたが持っていたかのようです:char temp = 0;

これは奇妙に聞こえるかもしれません。しかし、Cには「仮定義」という概念があります。参照:About Tentative definition

2

を指定しました。

は、の1文字を初期化していないため、最後のケースが異なります。どのように初期化されるかは、に依存します。ここでは、という変数を定義します。グローバル変数の場合は、ゼロで初期化されます。それがローカル変数であれば、それはまったく初期化されず、不確定な値を持ちます。

ゼロがゼロ、すなわち0で、'0'ではありません。

最後に、NULLはポインタ用であり、ポインタ以外の値用ではありません。文字列ターミネータ文字'\0'(これは0に等しい)はヌル文字とも呼ばれるため、混乱があります。ヌル文字とヌルポインタは、同じ実際の値を持つことができても、意味的に2つの異なるものです。

2
char temp[3]={}; 

C.

char temp[3]={0}; 

が0に一時[0]を初期化し、彼らはデフォルト初期化、グローバル変数であるかのように、残りは文字のための残りがことを意味し、初期化されている正しくありません0であってもよい。

char temp[3]=""; 

は、ストリングを文字リテラルに分割して割り当てた場合と同じように動作する(空の)ストリングからの初期化です。 空の文字列の場合、分解されたバージョンは{ '\0' }となります。これは、{0}と同じです。これは、それを上のケースと同等にします。

char temp;は、(仮にchars == zeroedの)デフォルトで初期化されます。それが非仮の定義に続くグローバルでない場合、または自動変数の場合は未定義の内容を持ちます。

関連する問題