-1

重複の可能性:
sizeof配列の明確化

2つの配列を宣言しました

GLfloat gCubeVertexData[216] = { list of numbers};

そして宣言された配列:

GLfloat *resultArray = malloc(sizeof(GLfloat) * [arrayOfVerticies count]);

    for(int i = 0; i < [arrayOfVerticies count]; i++)
    {
        resultArray[i] = [[arrayOfVerticies objectAtIndex:i] floatValue];

    }

なぜsizeof(gCubeVertexData)私が864を取得するのですか(GLflotは4ビットなので4で割ると216になります)

そして私が4を得るとき私はsizeof(resultArray)?ただし、resultArray [100]を出力すると、正しい数値が取得され、4つを超える数値が格納されますか?

4

4 に答える 4

1

なぜならsizeof(resultArray)、最初の要素へのポインタのサイズを取得しているからです。

于 2012-10-25T14:00:00.610 に答える
1

gCubeVertexDataは配列であり、resultArrayはポインタだからです。配列の場合、コンパイラは配列に割り当てる必要のあるバイト数を知っているため、サイズを明示的に知っています(C99の可変長配列の場合、実行時に簡単に計算することもできます。おそらくスタックポインタをいじることによって)。

ただし、の場合malloc()、コンパイラはポインタが指すメモリのサイズを認識していないため(そのサイズは、非標準でプラットフォームに依存しない方法でのみ取得できます...)、単に変数自体のサイズ(この場合はポインター)なのでsizeof(GLfloat *)、最後に戻ります。

于 2012-10-25T14:00:10.727 に答える
0

のタイプresultArrayは単純ですGLfloat *。つまり、「ポインタ」GLfloatであり、マシンは4文字を使用してポインタを格納します。ポインタに関連付けられたサイズ情報はsizeofオペレータには表示されません。

したがって、、sizeof resultArray == sizeof (GLfloat *)それはあなたが見ているものです。

于 2012-10-25T14:01:24.643 に答える
0

gCubeVertexDataとresultArrayの宣言を見てください。前者は216要素の配列で、後者は単なるポインタです。C(したがってC ++とObjective-C)は、ポインターを使用して配列にアクセスすることを許可しますが、それはそれらが同じ型を持っていることを意味するわけではありません。

于 2012-10-25T14:02:28.860 に答える