-1

可能重复:
sizeof 数组说明

我声明了 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

4 回答 4

1

因为sizeof(resultArray)您正在获取指向第一个元素的指针的大小。

于 2012-10-25T14:00:00.610 回答
1

因为gCubeVertexData是一个数组,并且resultArray是一个指针。在数组的情况下,编译器知道需要为数组分配多少字节,因此它明确知道大小(在 C99 中的可变长度数组的情况下,它也可以在运行时轻松计算,也许通过弄乱堆栈指针)。

但是,在 的情况下malloc(),编译器不知道指针指向的内存大小(无论如何,该大小只能以非标准和平台相关的方式获得......),所以它只返回变量本身的大小,在这种情况下是一个指针,所以你最终会回来sizeof(GLfloat *)

于 2012-10-25T14:00:10.727 回答
0

看gCubeVertexData和resultArray的声明。第一个是一个有 216 个元素的数组,后者只是一个指针。C(以及因此 C++ 和 Objective-C)允许使用指针来访问数组,但这并不意味着它们具有相同的类型。

于 2012-10-25T14:02:28.860 回答
0

的类型resultArray很简单GLfloat *,即“指向 的指针GLfloat,您的机器使用 4 个字符来存储一个指针。与指针关联的大小信息对sizeof操作员是不可见的。

因此,sizeof resultArray == sizeof (GLfloat *),这就是您所看到的。

于 2012-10-25T14:01:24.643 回答