1

Mac OSXLionでC++を使用しており、次のコードを作成しました。

float* floatArray = new float[10];

for(int i = 0; i < 10; i++)
{
    floatArray[i] = 0.0 ;
}

std::cout<< "Test size of a float " << sizeof(floatArray[0]) << std::endl;
// The value is 4 byte which is what I would expect.

std::cout<< "Test the size of the whole array" << sizeof(floatArray) <<std::endl;
// the value is 8. I would have expected the value to be 40 bytes.

何がわからないの?

前もって感謝します

4

5 に答える 5

7

この式は、ポインターのサイズではなく、ポインターsizeof(floatArray)のサイズを返します。

于 2012-08-30T16:29:02.023 に答える
3

システムでは、メモリ内のポインタのサイズは8バイトです。Sizeof()演算子は、メモリ内のその変数のサイズを調べるだけです。したがって、floatポインタのサイズを出力します。

詳細については、こちらをご覧ください。 'sizeof'(配列を指すポインター)を見つける方法は?

于 2012-08-30T16:32:25.950 に答える
2

これと比較してください(実際に配列です):

float floatArray[10] = {0.0};
std::cout<< "sizeof a float " << sizeof(floatArray[0]) << std::endl;
std::cout<< "sizeof the whole array " << sizeof(floatArray) << std::endl;

次に、動的なサイズまたは割り当てられた配列を使用する必要がある場合は、代わりにstd::vectorの使用を検討してください。

于 2012-08-30T16:36:29.673 に答える
1

2番目のsizeof(floatArray)は、実際には配列のサイズではなく、ポインターのサイズを返します。こちらをご覧ください

于 2012-08-30T16:30:55.703 に答える
0

sizeof演算子は、ポインターが指す要素の数とその数を認識していません(ただし、配列を指定する場合を除きますが、これもポインターではありません)。したがって、sizeof(float *)を返します。おそらく64ビットを使用しているため、ポインターのサイズは8バイト長です。

于 2012-08-30T16:33:03.483 に答える