在C ++中取消引用对象数组指针

时间:2012-06-11 21:28:15

标签: c++ arrays pointers

我有一个关于解除引用数组的小问题。我有类似这样的方法

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;
}

我得到两个不同的结果,但我希望它们是一样的?

好的,关于代码的其他信息:

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

2 个答案:

答案 0 :(得分:1)

如果没有看到更多代码,我无法确定这一点,但如果你有这样的话:

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

然后arr1arr2会有不同的尺寸。具体来说,arr1是一个指针,因此它的大小是指针的大小,而arr2是一个数组,它的大小将是T个对象的大小乘以数组中的对象。

虽然C ++中的数组和指针可以在某些上下文中互换,但它们实际上是不同的类型。 T*T [n]是不同类型,大小不同。一旦数组衰减到指针,它就会丢失其大小信息。

希望这有帮助!

答案 1 :(得分:0)

我想您想要比较数组的长度。 C数组的长度应计算为sizeof(array_variable) / sizeof(type_of_array_elements)sizeof(array_variable) / sizeof(one_element),而不仅仅是sizeof(array_variable)。有关详细信息,请参阅this SO question

试试这个:

cout << sizeof(myNewArray) / sizeof(myNewArray[0]) << ", " << sizeof(checkArray) / sizeof(checkArray[0]) << endl;