我有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)
当我sizeof(resultArray)
时,我得到4?事件虽然如果我打印出resultArray [100]我得到正确的数字,并且存储了超过4个数字?
答案 0 :(得分:1)
因为使用sizeof(resultArray)
,您将获得指向第一个元素的指针的大小。
答案 1 :(得分:1)
因为gCubeVertexData
是一个数组,resultArray
是一个指针。对于数组,编译器知道需要为数组分配多少字节,因此它明确知道大小(在C99中的可变长度数组的情况下,它也可以在运行时轻松计算,也许通过搞乱堆栈指针)。
但是,在malloc()
的情况下,编译器不知道指针所指向的内存大小(该大小只能以非标准和平台相关的方式获得.. 。),所以它只返回变量本身的大小,在这种情况下这是一个指针,所以最后你会得到sizeof(GLfloat *)
。
答案 2 :(得分:0)
resultArray
的类型只是GLfloat *
,即“指向GLfloat
的指针,而您的机器使用4个字符来存储指针。与指针关联的大小信息不可见到sizeof
运营商。
因此,sizeof resultArray == sizeof (GLfloat *)
,这就是你所看到的。
答案 3 :(得分:0)
查看gCubeVertexData和resultArray的声明。第一个是包含216个元素的数组,后者只是一个指针。 C(以及C ++和Objective-C)允许使用指针来访问数组,但这并不意味着它们具有相同的类型。