Tag: 多维数组

为什么248×248是我可以声明的最大二维数组大小?

我有一个程序问题,我想在C中声明一个256×256数组。不幸的是,我每次尝试声明一个大小的数组(整数)并运行我的程序时,它意外终止。 有什么建议? 我没有尝试过内存分配,因为我似乎无法理解它如何与多维数组一起工作(尽管我是C的新手,随时引导我完成它)。 另一个有趣的事情是我可以在C中声​​明一个248x248arrays没有任何问题,但没有更大的问题。 dims = 256; int majormatrix[dims][dims]; 编译: gcc -msse2 -O3 -march=pentium4 -malign-double -funroll-loops -pipe -fomit-frame-pointer -W -Wall -o “SkyFall.exe” “SkyFall.c” 我正在使用SciTE 323(不知道如何检查GCC版本)。

传递2D数组结构

我从数组中处理卡片类型结构。 struct card deck[DECKSIZE]; //The deck is an array of cards structures 我正在使用2Darrays。 一组卡片类型结构的数组 struct card allHands[hands][cards]; 我使用此函数将deck和数组作为指针传递给数组的参数。 我还改变了甲板指针的位置,以模拟在传递给玩家时丢失牌的牌组。 void dealHands(struct card *deck, struct card **handArray, int hands, int cards){ int players; int cardCount; int passCard = 0; struct card * thisDeck; thisDeck = deck; for(players = 0; players < hands; players++){ for(cardCount = 0; […]

C函数const多维数组参数中的奇怪警告

我对这段代码有一些奇怪的警告: typedef double mat4[4][4]; void mprod4(mat4 r, const mat4 a, const mat4 b) { /* yes, function is empty */ } int main() { mat4 mr, ma, mb; mprod4(mr, ma, mb); } gcc输出如下: $ gcc -o test test.c test.c: In function ‘main’: test.c:13: warning: passing argument 2 of ‘mprod4’ from incompatible pointer type test.c:4: note: […]

对多维数组的一维访问:它是明确定义的行为吗?

我想我们都同意,通过以一维方式解引用(可能是偏移的)指向其第一个元素的指针来访问真正的多维数组被认为是惯用的C,例如: void clearBottomRightElement(int *array, int M, int N) { array[M*N-1] = 0; // Pretend the array is one-dimensional } int mtx[5][3]; … clearBottomRightElement(&mtx[0][0], 5, 3); 然而,我的语言律师需要说服这实际上是明确定义的C! 特别是: 标准是否保证编译器不会在例如mtx[0][2]和mtx[1][0]之间插入填充? 通常,索引关闭数组的末尾(除了结尾之外)是未定义的(C99,6.5.6 / 8)。 所以以下内容显然未定义: struct { int row[3]; // The object in question is an int[3] int other[10]; } foo; int *p = &foo.row[7]; // ERROR: A […]

堆分配一个2D数组(不是指针数组)

我正在编写C代码,我想堆分配512 * 256字节。 为了方便起见,我希望能够使用语法数组[a] [b]访问元素; 没有算术来找到正确的索引。 我在网上看到的每个教程都告诉我要创建一个指针数组,指向我在数组中想要的行数组。 这意味着每个子数组都需要单独进行malloc和free。 我感兴趣的是一个解决方案,只需要一次调用malloc和一次调用free。(因此所有元素都是连续的)我认为这是可能的,因为我不会构造一个锯齿状数组。 如果有人可以分享声明这样一个数组的语法,我将不胜感激。

Malloc是C中的三维数组?

我正在将一些MATLAB代码翻译成C,我正在转换的脚本大量使用具有10 * 100 * 300复杂条目的3D数组。 数组的大小也取决于传感器的输入,理想情况下应该动态分配数组。 到目前为止,我已经尝试了两种方法,第一种方法是平面1Darrays value = array[x + (y*xSize) + (z*ySize*xSize)] 这伤害了我的大脑使用。 我还尝试了一个指针数组的数组 int main () { int ***array = malloc(3*sizeof(int**)); int i, j; for (i = 0; i < 3; i++) { *array[i] = malloc(3*sizeof(int*)); for (j = 0; j < 3; j++) { array[i][j] = malloc(3*sizeof(int)); } } array[1][2][1] = […]