0

次のように定義するとします。

unsigned char temp[2][13];

これに割り当てられるデフォルト値は何char[]ですか? のよう{'', '', '', ... , ''}ですか?

私のプログラム (電卓) では、operand[2][13](最初のオペランドはoperand[0]で、2 番目のオペランドはoperand[1]) があり、操作がありResult[15]、それらはすべてunsigned charです。最初に、ユーザーは Operand1 と Operand2 (一度に 1 文字) を入力し、それが に格納されoperand[2][13]、プログラムは結果を文字として に格納しResult[15]ます。今私が欲しいのは、次の反復で、ユーザーが次のオペランドを入力できるようにoperand[2][13]、操作をクリアResult[15]し、プログラムが次の操作を実行し、結果をに保存することですResult[15]

これらの配列をクリアするにはどうすればよいですか?

4

5 に答える 5

3

memset(operand, 0, 2 * 13);
memset(Result, 0, 15);

于 2011-05-04T17:39:26.890 に答える
2

デフォルト値はありません。まったくありません。必ず自分で設定してください。便利なフォームの 1 つを次に示します。

unsigned char temp[2][13] = {0};
于 2011-05-04T17:39:39.290 に答える
2

''値ではありません。実際、「空」文字を指定しても意味がありません。

通常、データは初期化されません。データは、割り当てる前にメモリにあったものになります。例外は、これが静的データである場合であり、ゼロ化 ('\0') する必要があります。

通常、 などの関数を使用して、このようなデータを自分で初期化することを計画する必要がありますmemset()

于 2011-05-04T17:39:50.037 に答える
1

それが定義されているコンテキストに依存します。

関数の外で (グローバルに) 宣言されている場合は.bss、実行可能ファイルのセクションに常駐し、オペレーティング システムは、プログラムの起動時にmainが呼び出される前に、配列全体をゼロに初期化します。

ローカルで (スタック上で) 宣言されている場合は、ガベージが含まれているmemsetため、適切な配列初期化子または適切な配列初期化子を使用して初期化できます。

于 2011-05-04T17:39:58.803 に答える
1

配列要素にデフォルト値が割り当てられていない (値を読み取る動作は未定義) か、配列が定義されている正確な方法と場所に応じて 0 (ゼロ) が割り当てられます。

グローバルおよび静的配列は 0 (ゼロ) に初期化されます

unsigned char aglobal[2][13]; /* all zeroes */
int foo(void) {
    static unsigned char astatic[2][13]; /* all zeroes */
    unsigned char aauto[2][13]; /* unset, ub to read values */
}

ただし、好みで初期化できます

unsigned char tmp[2][13] = {{1, 2, 3, 4, 5}, {11}};

上記の初期化には、 と を除くすべての要素が 0 (ゼロ) になるという効果がtmp[0][0]ありtmp[0][4]ますtmp[1][0]

または、初期化後に、コードの途中で要素を 1 つずつ設定します。

for (j=0; j<2; j++) {
    for (k=0; k<13; j++) {
        tmp[j][k] = 0;
    }
}
于 2011-05-04T17:43:32.983 に答える