1. ホーム
  2. c

[解決済み] sizeof'(配列を指すポインタ)を見つけるにはどうしたらいいですか?

2022-03-14 21:45:04

質問

まず最初に、いくつかのコードを紹介します。

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バイトであるそのサイズを与えるだけでなく)指し示すのですか?

解決方法は?

いいえ、できません。 コンパイラは、ポインタが何を指しているのかわからないのです。 帯域外の既知の値で配列を終了させ、その値までのサイズを数えるというようなトリックもありますが、これでは sizeof() .

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