我有一个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
答案 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
。