0

私が書いた次のコードから:

#define ELEMENTS_NUMBER_OF(array) (sizeof(array) / sizeof(array[0]))


printf("\"abcdef\"[0]: %c\n", "abcdef"[0]);
printf("elements number of \"abcdef\" is %d\n", ELEMENTS_NUMBER_OF("abcdef"));

私は次のように結論付けました:

  1. 文字列リテラル"abcdef"char配列です。
  2. sizeof(a)/sizeof(a[0])任意の型の配列の長さを計算するために使用できます。

私は正しいですか?

4

2 に答える 2

1
  1. はい、"abcdef"型要素の配列charと静的ストレージ期間に格納されます。
  2. aが配列 (VLA であっても) の場合、のsizeof(a)/sizeof(a[0])要素数を計算しaます。sizeof aarray の長さをaバイト単位で返します。aifが動的に割り当てられたメモリへのポインターである場合は、ポインター型のサイズが生成されることに注意してください。sizeofまた、配列型を持つように宣言されたパラメーターに適用されるとsizeof、それぞれのポインター型のサイズが生成されることに注意してください。
于 2012-07-31T09:54:04.610 に答える
1
  1. はい、「ABC」と書くと、きれいではありませんが、各文字にインデックスでアクセスできる文字列として扱うことができます。

  2. 「配列」が配列の場合、はい、要素の数を返しますが、引数がポインターの場合、sizeof は配列のサイズではなくポインターのサイズを返すため、正しい値を返しません。

于 2012-07-31T09:07:08.347 に答える