Tag: multidimensional array

在Struct中存储和访问2D数组

我正在尝试在C中编写一个程序,根据用户输入生成螺旋并将其打印到控制台。 我无法弄清楚如何访问我在结构“螺旋”中定义的2D数组“数据”。 如何修复“警告:从不兼容的指针类型分配”错误? #include typedef struct Spiral { int size; int **data; } Spiral; Spiral generateSpiral(int size); void printSpiral(Spiral spiral); static int rotate(); int main() { int size; scanf(“%d”, &size); Spiral spiral = generateSpiral(size); printSpiral(spiral); return 0; } Spiral generateSpiral(int size) { int data[size][size]; int i; for (i = 0; i < size; i++) { […]

从JNI / NDK返回从C到Java的2D原始数组

我已经找到了大量关于如何在JNI中生成2D原始数组并将其返回给Java的文档。 但是这些信息无法描述如何在C中给定上下文传递已经存在的 2D浮点数组(float **)。 为了明确地描述我的问题,我将添加一些我想要实现的C伪代码: // Returns a 2D float array from C to Java jfloatArray ndk_test_getMy2DArray(JNIEnv* env, jobject thiz, jlong context) { // Cast my context reference MyContextRef contextRef = (MyContextRef) context; // In case we need it below unsigned int length = MyContextGet1DLength(contextRef); // Get the 2D Array we want to “Cast” float** […]

2D数组索引 – 未定义的行为?

我最近遇到了一些代码,做了一些有问题的2D数组索引操作。 以下面的代码示例为例: int a[5][5]; a[0][20] = 3; a[-2][15] = 4; a[5][-3] = 5; 上面的索引操作是否受到未定义的行为的影响?

在C中的malloc,但使用多维数组语法

有没有什么方法可以malloc一个大型数组,但用2D语法引用它? 我想要的东西: int *memory = (int *)malloc(sizeof(int)*400*200); int MAGICVAR = …; MAGICVAR[20][10] = 3; //sets the (200*20 + 10)th element 更新:这一点很重要:我只想拥有一个连续的内存块。 我只是不想写一个像: #define INDX(a,b) (a*200+b); 然后参考我的blob: memory[INDX(a,b)]; 我更喜欢: memory[a][b]; 更新:我理解编译器无法按原样知道。 我愿意提供额外的信息,例如: int *MAGICVAR[][200] = memory; 没有这样的语法吗? 请注意我不仅使用固定宽度数组的原因是它太大而无法放在堆栈上。 更新:伙计们,我可以这样做: void toldyou(char MAGICVAR[][286][5]) { //use MAGICVAR } //from another function: char *memory = (char *)malloc(sizeof(char)*1820*286*5); fool(memory); 我收到一个警告, […]

传递可变大小的多维数组

我试图理解将多维数组传递给c中的函数的“最佳实践”(或实际上是任何实践)是什么。 当然这取决于应用程序,因此我们考虑编写一个函数来打印可变大小的2D数组。 特别是,我对如何在下面的代码中编写函数printArry(__, int a, int b)感兴趣。 我省略了第一个参数,因为我不确定应该是什么。 void printArry(_____, int a, int b){ /* what goes here? */ } int main(int argc, char** argv){ int a1=5; int b1=6; int a2=7; int a2=8; int arry1[a1][b1]; int arry2[a2][b2]; /* set values in arrays */ printArry(arry1, a1, b1); printArry(arry2, a2, b2); }