Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建一个全局二维数组,其大小仅在运行时在c中定义(或者如何在opengl中将参数传递给绘图函数)?_C_Arrays_Opengl - Fatal编程技术网

如何创建一个全局二维数组,其大小仅在运行时在c中定义(或者如何在opengl中将参数传递给绘图函数)?

如何创建一个全局二维数组,其大小仅在运行时在c中定义(或者如何在opengl中将参数传递给绘图函数)?,c,arrays,opengl,C,Arrays,Opengl,我想创建一个代表棋盘游戏位置的二维数组。我已经定义了每个位置的类型为“struct position”,它是一个枚举,可以是“empty”、“piece1”或“piece2”。问题是,用户决定表的大小,即二维数组将有多少个位置。因为我调用的是opengl的图形函数,它不能接受参数(或者有什么方法可以这样做吗?),所以可以在运行时定义二维数组的大小吗?不,不能在C中定义运行时数组的大小。但是一维数组与指针具有相同的语义,因此可以“模拟”通过使用指针来替代多维数据集。像这样的事情应该可以做到: in

我想创建一个代表棋盘游戏位置的二维数组。我已经定义了每个位置的类型为“struct position”,它是一个枚举,可以是“empty”、“piece1”或“piece2”。问题是,用户决定表的大小,即二维数组将有多少个位置。因为我调用的是opengl的图形函数,它不能接受参数(或者有什么方法可以这样做吗?),所以可以在运行时定义二维数组的大小吗?

不,不能在C中定义运行时数组的大小。但是一维数组与指针具有相同的语义,因此可以“模拟”通过使用指针来替代多维数据集。像这样的事情应该可以做到:

int w = 16, h = 16;
int *array = malloc(sizeof(int) * w * h);

int x = 4, y = 2;
array[y * w + x] = 1;

您可能会发现,不仅要有宽度和高度,还要有“跨距”——单元格与下一行中相应单元格之间的偏移量。这样可以很容易地将一个栅格视为另一个栅格的子栅格(通过保持步幅不变,但更改宽度/高度和基准指针),同样,您也可以通过更改步幅将栅格倒置或跳过每隔一行。这种技术在视频处理应用程序中特别有用,但在游戏中也可能很好。如果不清楚:使用
stride
只意味着将数组索引计算为
y*stride+x
,而不是
y*h+x
,但是仍然使用
w
h
作为
x
y
的边界。顺便说一句,如果要在行上迭代,请不要不断重复
y*stride
y*w
。相反,保留一个指向当前行的指针,并在每次迭代时以
stride
w
的方式递增它。