タイプの関数を処理しています:
int xyz(int input[])
メイン関数にアクセスできないため、配列のサイズがわかりません。入力配列のサイズを見つけるにはどうすればよいですか? 配列がどこで終わるかを知る方法はありますか?
sizeof(input)/sizeof(int*)
入力は基本的にポインターであるため、1を与えています。
タイプの関数を処理しています:
int xyz(int input[])
メイン関数にアクセスできないため、配列のサイズがわかりません。入力配列のサイズを見つけるにはどうすればよいですか? 配列がどこで終わるかを知る方法はありますか?
sizeof(input)/sizeof(int*)
入力は基本的にポインターであるため、1を与えています。
呼び出し元が配列に関するサイズ情報を提供しない場合、関数 xyz() でサイズを取得する方法はありません。
サイズ情報を別の変数で (または配列の要素として) 渡すことができます。
int xyx(int abc[], size_t len)
{
}
いいえ...呼び出された関数内から(移植可能な)方法はないため、この状況(つまり、要素数パラメーターが渡されない場合)では、呼び出し元が最後にセンチネル値を提供するなどの何らかの規則を採用するのが普通です要素を使用するか、一定数の要素を保証します。センチネルが使用されている場合は、デバッガーで呼び出しコードをチェックすることで、これが行われていたことを自分自身で証明できる場合があります。
配列を関数に渡し、長さを指定しないと、配列がサイズが常に 32 (64) ビットのポインターとして減衰するため、配列を見つけることができません。