不同的c数组声明

时间:2012-10-25 13:58:01

标签: objective-c c arrays

  

可能重复:
  sizeof array clarification

我有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个数字?

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)允许使用指针来访问数组,但这并不意味着它们具有相同的类型。