C数组维度问题

时间:2010-11-15 18:26:14

标签: c multidimensional-array

我有一个1653行的数组:

#define NUM_POLYGON_OBJECT_VERTEX 1653 * 3

static const float vertices[NUM_POLYGON_OBJECT_VERTEX] =
{
   {{2.4f, 0.5f, 0.0f}, {0.0f, 0.0f, 1.0f} },
   ...
};

NUM_POLYGON_OBJECT_VERTEX的正确值是什么?

由于

更新

我不知道用C编程,你付给我-3分。的难以置信

第二次更新 我收到以下错误:

warning: excess elements in scalar initializer

7 个答案:

答案 0 :(得分:5)

float arr[1653][2][3];

这取决于你的大小意味着什么。对于总大小,它将是:

sizeof(float) * 1653 * 3 * 2

然而,找到总大小的最佳方法是:

sizeof(arr)

使用arr作为数组变量。

答案 1 :(得分:3)

至少IMO,正确的做法就是完全离开NUM_POLYGON_OBJECT_VERTEX

static const float vertices[] =
{
   {{2.4f, 0.5f, 0.0f}, {0.0f, 0.0f, 1.0f} },
   ...
};

然后,编译器将根据初始化数据自动计算大小。要在以后计算大小,您可以使用以下内容:

#define elements(array) (sizeof(array)/sizeof(array[0]))

但是,请注意,你所拥有的东西似乎根本不是一个多维数组(也不是C最接近的数组,一个数组数组)。由于您只有一组括号,所以您拥有的是一维数组。如果要将其创建为多维数组,可以执行以下操作:

static const float vertices[][3] =
{
   {{2.4f, 0.5f, 0.0f}, {0.0f, 0.0f, 1.0f} },
   ...
};

注意添加的[3] - 这告诉编译器你想要的是一个由三个浮点数组成的数组。这意味着顶点[0]将是构成第一个顶点的三个浮点数的整个数组,并且顶点[0] [1]将(至少传统上)是第一个顶点的x值。

如果您以这种方式定义数组,您仍然可以使用上面的elements宏 - 但由于vertices[0]将是一个完整的顶点而不是单个float,因此元素将是顶点数而不是浮点数。

根据您所包含的大括号,您实际上可能希望它是:

static const float lines[][2][3] = { /* ... */ };

现在你的支撑说你有的顶点,一对顶点定义了一条线......

答案 2 :(得分:2)

您是否尝试对变量使用 sizeof

答案 3 :(得分:0)

其中的元素数量在您给出的示例2中,但其花费的内存要多得多(6 * sizeof(float))。如果您想要具有完整数组的大小

,请将这些数字乘以1653

答案 4 :(得分:0)

它有两个索引大小。 1653和3.总体而言,其指数大小为1653 * 3.

数据大小取决于编译器正在应用的“打包”模型(即“stride”)。

答案 5 :(得分:0)

取决于几件事。

1)你的大小是什么意思?你的意思是数组中的元素数量?你的意思是2D阵列所拥有的阵列数量?你的意思是整个数组的字节大小?你的意思是指针的大小吗?

2)你的系统浮动有多大?你可以找到sizeof()运算符。

答案 6 :(得分:0)

大小?嗯...取决于你想知道什么。

sizeof arr数组的大小,以字节为单位(嗯,在char中,确切地说,但在普通计算机上是相同的),

(sizeof arr / sizeof *arr)是数组中元素的数量 - 一个元素是一行浮点数。

关于内部的实际浮动数,最简单的方法就是使用sizeof arr / sizeof float