C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: プロトタイプ宣言した引数の配列のサイズ


(過去ログ 130 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■76902 / inTopicNo.1)  プロトタイプ宣言した引数の配列のサイズ
  
□投稿者/ こまお (3回)-(2015/08/27(Thu) 15:20:14)

分類:[C/C++] 

#define NELEMS(a) ((int)(sizeof(a)/sizeof(a[0])))

void foo(int arr[100]) {
int n = NELEMS(arr);
...

みたいなことをして、nが100になるのを期待したのですがダメでした。

void foo(int arr[], int arrSize) {

みたいにするしかないのでしょうか。

引用返信 編集キー/
■76905 / inTopicNo.2)  Re[1]: プロトタイプ宣言した引数の配列のサイズ
□投稿者/ 774RR (301回)-(2015/08/27(Thu) 15:44:34)
> void foo(int arr[], int arrSize) {
はい、そのとおりっす。

関数の仮引数に配列を書いても配列にならずにポインタに化けるというのが C/C++ の仕様です。
ISO/IEC 14882:1998 8.3.5-3 など

void foo(int arr[100]) {
std::cout << typeid(arr).name() << std::endl;
}
の結果は int*

C++ なら生配列は捨てて vector か array を使うと吉。

引用返信 編集キー/
■76907 / inTopicNo.3)  Re[2]: プロトタイプ宣言した引数の配列のサイズ
□投稿者/ Hongliang (335回)-(2015/08/27(Thu) 15:51:16)
一応、参照を使えば無理ではないですが。

void foo(int (&arr)[100]);

任意のサイズの配列を受け取るなら

template<size_t size>
void foo(int (&arr)[size]);

静的配列しか受け取れないので使いづらいですけどね。
引用返信 編集キー/
■76909 / inTopicNo.4)  Re[3]: プロトタイプ宣言した引数の配列のサイズ
□投稿者/ こまお (4回)-(2015/08/27(Thu) 16:00:02)
固定サイズの配列を渡すので第2引数をめんどくさく感じたのでした。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -