配列のサイズを調べるにはどうすればいいですか(最初の要素配列を指すポインタから)?質問する

配列のサイズを調べるにはどうすればいいですか(最初の要素配列を指すポインタから)?質問する

まず、ここにコードがあります:

int main() 
{
    int days[] = {1,2,3,4,5};
    int *ptr = days;
    printf("%u\n", sizeof(days));
    printf("%u\n", sizeof(ptr));

    return 0;
}

指している配列のサイズを確認する方法はありますかptr(32 ビット システムでは 4 バイトであるサイズを単に指定するのではなく)?

ベストアンサー1

いいえ、できません。コンパイラはポインタが何を指しているのかわかりません。配列を既知の帯域外値で終了し、その値までサイズをカウントするなどのトリックはありますが、それは を使用しませんsizeof()

もう一つのトリックは、ザンこれは、サイズをどこかに隠しておくことです。たとえば、配列を動的に割り当てる場合は、size_t必要なブロックよりも 1 つ大きいブロックを割り当て、そこにサイズを隠して、ptr+sizeof(size_t)配列へのポインタとして返します。サイズが必要になったら、ポインタをデクリメントして、隠してある値を確認します。配列だけでなく、最初からブロック全体を解放することを忘れないでください。

おすすめ記事