-1

配列の逆参照について、この小さな質問があります。私はこのようなクラスのメソッドを持っています

T* foo()
{
 // create specific array of objects in here
 return (array)
}

foo2()
{
  myNewArray = *foo();
  // exactly the same algorithm as in foo to create checkArray
  cout << sizeof(myNewArray) << sizeof(checkArray) << endl;
}

2 つの異なる結果が得られましたが、同じ結果になると思いますか?

わかりましたので、コードに関する追加情報:

vec4* getGridAttr()
{
        float xval = -0.5;
        float yval = -0.75;
        float xval2 = -0.5;
        float yval2 = -0.75;
        vec4 pointsGrid[100];

        for (int i=0;i<42;i++)
        {

          //Draw horizontal lines
          if (i % 2 == 0) pointsGrid[i] = vec4(xval, yval, 0.0,1);
          else if (i % 2 != 0) {
             pointsGrid[i] = vec4((xval+0.75), yval, 0.0,1);
             yval += 0.075;
             }
        }
        for (int j=42;j<64;j++)
        {

          //Draw horizontal lines
          if (j % 2 != 0)
          {
              pointsGrid[j] = vec4(xval2, yval2, 0.0,1);
              xval2 += 0.075;

          }
          else if (j % 2 == 0) {
             pointsGrid[j] = vec4(xval2, -yval2, 0.0,1);

             }

        }
        return (pointsGrid);
}

そして私の他の方法では、私はこれを持っています:

void display( void )
{

vec4 points1[100];
//code here populates points1 exactly the same as in getGridAttributes, 

cout << "points1 : " << sizeof(points1) << "   " << "  pointsFromGridAttr : " << sizeof(*getGridAttr()) << endl;
}

出力は points1 です: 1600 pointsFromGridAttr 16

4

2 に答える 2

1

これ以上のコードを見ないと、これを確信することはできませんが、次のようなものがある場合:

T* arr1 = makeArray();
T arr2[n];

それarr1から とarr2は異なるサイズになります。具体的にarr1は、 はポインターであるため、そのサイズはポインターのサイズですが、arr2は配列であり、そのサイズはオブジェクトのサイズにT配列内のオブジェクトの数を掛けたものになります。

C++ の配列とポインターは、一部のコンテキストでは交換できますが、実際には異なる型です。 サイズの異なるさまざまなタイプがありますT*T [n]配列がポインターに分解されると、サイズ情報が失われます。

お役に立てれば!

于 2012-06-11T21:30:00.497 に答える
0

配列の長さを比較したいと思います。C 配列の長さは、だけでなくsizeof(array_variable) / sizeof(type_of_array_elements)またはとして計算する必要があります。詳細については、この SO の質問を参照してください。sizeof(array_variable) / sizeof(one_element)sizeof(array_variable)

これを試して:

cout << sizeof(myNewArray) / sizeof(myNewArray[0]) << ", " << sizeof(checkArray) / sizeof(checkArray[0]) << endl;
于 2012-06-11T21:32:49.043 に答える