我有一个关于解除引用数组的小问题。我有类似这样的方法
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
答案 0 :(得分:1)
如果没有看到更多代码,我无法确定这一点,但如果你有这样的话:
T* arr1 = makeArray();
T arr2[n];
然后arr1
和arr2
会有不同的尺寸。具体来说,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;