まず、ここにコードがあります:
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)
配列へのポインタとして返します。サイズが必要になったら、ポインタをデクリメントして、隠してある値を確認します。配列だけでなく、最初からブロック全体を解放することを忘れないでください。