配列のサイズとポインタのサイズはどういう意味ですか?

最近、私はコードの爆破を読んで、それは混乱しています

 static string const dirs[6] = {"-n", "-ne", "-se", "-s", "-sw", "-nw" };
 int a = sizeof(dirs)/sizeof(*dirs);

そしてaは6の配列のサイズに等しくなります。

だから私の質問です:

  1. sizeof(dirs)は何を表していますか?配列全体のサイズは?

  2. sizeof(* dirs)は何を表していますか?

2
少なくとも2番目の配列の場合。
追加された 著者 chris,
もしあなたがC ++で配列を使っていこうとしているのであれば、これを行うのが普通の方法です: template size_t arraylen(T(&)[N]){return N; }
追加された 著者 Jerry Coffin,
もしあなたがC ++で配列を使っていこうとしているのであれば、これを行うのが普通の方法です: template size_t arraylen(T(&)[N]){return N; }
追加された 著者 Jerry Coffin,
@ JerryCoffin:それに constexpr を追加します:P
追加された 著者 Mooing Duck,
sizeof が何で、 sizeof が何をしているのかについて、好きなC ++の本は何を言っていますか?
追加された 著者 AnT,
sizeof が何で、 sizeof が何をしているのかについて、好きなC ++の本は何を言っていますか?
追加された 著者 AnT,
その日の私の好きな表現の誤用は「ポインタのサイズ」です。それが本当に意味するものにも近くない。 (Yay、あなたはこれを知っていたはずです。
追加された 著者 user529758,
その日の私の好きな表現の誤用は「ポインタのサイズ」です。それが本当に意味するものにも近くない。 (Yay、あなたはこれを知っていたはずです。
追加された 著者 user529758,

9 答え

what does sizeof(dirs) represent? Is the size of the total array?

はい、そうです。

what does sizeof(*dirs) represent?

*dirs is same with dirs[0], so sizeof(*dirs) is the size of the first element. (well ,the size of every element because they are the same)

sizeof(dirs)/sizeof(*dirs) will be the number of elements in the array.

2
追加された
what does sizeof(dirs) represent? Is the size of the total array?

はい、そうです。

what does sizeof(*dirs) represent?

*dirs is same with dirs[0], so sizeof(*dirs) is the size of the first element. (well ,the size of every element because they are the same)

sizeof(dirs)/sizeof(*dirs) will be the number of elements in the array.

2
追加された
  1. sizeof(dirs) represents the size of the entire array
  2. sizeof(*dirs) represents the size of a single element of the array

したがって、sizeof(* dirs)*要素の数= sizeof(dirs)、要素の数*各要素のサイズ=配列全体のサイズ

したがって、要素の数= sizeof(dirs)/ sizeof(* dirs)。

2
追加された
" sizeof(* dirs)は、配列の要素のサイズを表します。つまり、最初の要素のサイズを表します。
追加された 著者 user529758,
  1. sizeof(dirs) represents the size of the entire array
  2. sizeof(*dirs) represents the size of a single element of the array

したがって、sizeof(* dirs)*要素の数= sizeof(dirs)、要素の数*各要素のサイズ=配列全体のサイズ

したがって、要素の数= sizeof(dirs)/ sizeof(* dirs)。

2
追加された
" sizeof(* dirs)は、配列の要素のサイズを表します。つまり、最初の要素のサイズを表します。
追加された 著者 user529758,

sizeof演算子が参照に適用されるとき、sizeofがオブジェクト自体に適用された場合と同じ結果になります。

サイズの指定されていない配列が構造体の最後の要素である場合、sizeof演算子は配列のない構造体のサイズを返します。

sizeof演算子は、次の形式の式を使用して配列の要素数を計算するためによく使用されます。

sizeof array/sizeof array[0]
0
追加された

sizeof演算子が参照に適用されるとき、sizeofがオブジェクト自体に適用された場合と同じ結果になります。

サイズの指定されていない配列が構造体の最後の要素である場合、sizeof演算子は配列のない構造体のサイズを返します。

sizeof演算子は、次の形式の式を使用して配列の要素数を計算するためによく使用されます。

sizeof array/sizeof array[0]
0
追加された

sizeof operator yields the size in bytes of the provided operand. Since *dir is equal to dir[0] the sizeof(*dirs) will return the size of the first array element in bytes wile sizeof(dirs) will return the size in bytes of all array. Hence when you divide those numbers you get the number of elements in array.

More on sizeof operator: http://en.wikipedia.org/wiki/Sizeof http://en.cppreference.com/w/cpp/language/sizeof and http://msdn.microsoft.com/en-us/library/4s7x1k91(v=vs.110).aspx

0
追加された

上記の答えの1つの重要な例外は、dirが関数に渡された場合、 sizeof(* dirs)は配列内の1要素のサイズになりますが、 sizeof dirs は、あなたの環境におけるポインタ型のサイズに評価されるようになりました。これは、関数に渡された配列が関数内で使用されたときのポインタにすぎないためです。

0
追加された

上記の答えの1つの重要な例外は、dirが関数に渡された場合、 sizeof(* dirs)は配列内の1要素のサイズになりますが、 sizeof dirs は、あなたの環境におけるポインタ型のサイズに評価されるようになりました。これは、関数に渡された配列が関数内で使用されたときのポインタにすぎないためです。

0
追加された