2012-06-11 31 views
-1

我有關於解引用數組的小問題。我有類似這樣的方法解引用C++中的對象數組指針

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

+5

如何'myNewArray'定義?如何定義checkArray?數組是如何創建的?僞代碼不會幫助我們弄清楚發生了什麼;你真正的代碼是什麼? – cdhowie

回答

1

沒有看到更多的代碼,我不能確定這一點,但如果你有這樣的事情:

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

然後arr1arr2會有不同的大小。具體而言,arr1是一個指針,所以它的大小是一個指針的大小,而arr2是一個數組,它的大小將是一個T對象的大小乘以數組中的對象的數量。

雖然C++中的數組和指針可以在某些上下文中互換,但它們確實是不同的類型。 T*T [n]是具有不同大小的不同類型。一旦數組衰減到一個指針,就會丟失它的大小信息。

希望這會有所幫助!

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;