2

この例を参照してください。



int main( int argc, char ** argv )
{
    int *ptr = malloc(100 * sizeof (int));

    printf("sizeof(array) is %d bytes\n", sizeof(ptr));
}

printf 関数は 4 バイトしか返しません! なにが問題ですか?

本当にありがとう!!!

4

4 に答える 4

8

何も問題はありません。プラットフォーム上のポインターのサイズを求め、取得しています。

一般に、ポインタが指すメモリ ブロックのサイズを取得することはできません。後で必要になった場合は、自分で覚えておく必要があります。

于 2010-03-19T14:58:53.850 に答える
2

一部のプラットフォームでは、malloc/calloc/strdup によって割り当てられた領域のサイズを返す「msize」関数があります。しかし、これは標準ではありません。

于 2010-03-19T15:03:29.173 に答える
1

受け取ったメモリ ブロックのサイズを印刷することはできません。要求したすべてのメモリを割り当てるかmalloc、割り当てません (そして を返しますNULL)。

オペレーターは、sizeof()ユーザーが要求したことを実行します。つまり、ポインターのサイズが通知されます。ポインター自体は、メモリ内で 4 バイトを占有します。

于 2010-03-19T14:59:30.490 に答える
1

これは、32 ビット プラットフォーム上の任意のポインターのサイズです。

于 2010-03-19T14:59:51.457 に答える