0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

c++ 配列にsizeof演算子を適用する場合、引数とそうでない場合で異なる値を取得する

Posted at

c++で配列の長さを求める方法として、配列全体のバイト数/配列の要素の型のバイト数 で求める方法がよく知られている。

int array[] = {1, 2, 3, 4, 5, 5, 5, 5, 5};
cout << sizeof(array) << endl; // 36
cout << sizeof(array[0]) << endl; // 4
cout << "arrayの長さ: " << sizeof(array) / sizeof(array[0]) << endl; // arrayの長さ:9

しかし、関数の引数となっている配列をsizeof演算子に適用すると、上記とは異なる結果となる

size_t arr_size(int arr[])
{
    return sizeof(arr);
}

int array[] = {1, 2, 3, 4, 5, 5, 5, 5, 5};
cout << sizefunc(array) << endl; // 8(上記と異なる)
cout << "arrayの長さ: " << sizefunc(array) / sizeof(array[0]) << endl; // arrayの長さ:2

原因がよくわからないが、引数の場合はポインタ型になる(=> sizeof(arr) -> sizeof(int *) となる?)から?
関数内で配列のサイズを求めるのではなく、関数の引数に配列そのものに加えて、配列のサイズも追加する方法がよく見られる気がする。

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?