Tag: 多维数组

将多维数组传递给C中的函数

我有这样的function: void myfunc(int** arr, int n) { int i, j; for(i=0; i<n; ++i) { for(j=0; j<n; ++j) { printf("%d,", *(arr + i*n + j) ); // Print numbers with commas } printf("\n"); // Just breakline } } 在其他函数中,我有一个像这样的二维数组: int main() { int seqs[8][8] = { {0, 32, 36, 52, 48, 16, 20, 4}, {0, 16, […]

如果在编译时两个维度都是未知的,如何传递二维数组

这是通过未知大小的二维数组的正确方法是什么? reprVectorsTree::reprVectorsTree(float tree[][], int noOfVectors, int dimensions) 如何在函数中稍后访问此数组的元素? 如何从调用函数传递二维数组? – – -编辑 – – 我想用数组做,因为调用是从ac代码完成的,并且有ac到c ++接口 —–编辑—–如何定义从调用函数传递二维数组? float tree[15][2] = {{2,1},{2,1},{2,1},{2,1},{2,1},{2,1},{2,1},{2,1},{2,1},{2,1},{2,1},{2,1},{2,1},{2,1},{2,1}}; reprVectorsTree *r1 = new reprVectorsTree(tree[0][0],8,2); 上面的代码有什么问题? 我得到一个无法将参数1从’float’转换为’float **’

传递2d数组在C中运行?

我知道这很简单,但我似乎无法做到这一点。 我的function是这样的: int GefMain(int array[][5]) { //do stuff return 1; } 在我的主要: int GefMain(int array[][5]); int main(void) { int array[1800][5]; GefMain(array); return 0; } 我提到了这个有用的资源,但我仍然收到错误”warning: passing argument 1 of GefMain from incompatible pointer type.” 我究竟做错了什么? 编辑: 代码在两个文件中,由编译器链接在一起。 我没有使用gcc。 上面的代码正是我所拥有的,除了函数在main中声明为“extern int”。 谢谢大家的时间。

2D数组传递给函数

我一直在阅读这个问题,但我无法得到结果代码来解决问题。 我应该如何更改它以使其工作? void print2(int ** array,int n, int m); main() { int array[][4]={{1,2,3,4},{5,6,7,8}}; int array2[][2]={{1,2},{3,4},{5,6},{7,8}}; print2(array,2,4); } void print2(int ** array,int n,int m) { int i,j; for(i=0;i<n;i++) { for(j=0;j<m;j++) printf("%d ",array[i][j]); printf("\n"); } }

多维char数组?

我要做的是创建一个二维数组的字符串以下seg故障,什么是错的? void add2(char***b, char *i) { if (!i) { b[0][0] = (char*) malloc(120); sprintf(b[0][0], “%s”, “hithere”); b[0][1] = (char*) malloc(120); sprintf(b[0][1], “%s”, “bithere”); } else { strcat(b[0][0], “\\\\”); strcat(b[0][0], i); strcat(b[0][1], “\\\\”); strcat(b[0][1], i); } } void add1(char ***b) { add2(b,NULL); add2(b,”one”); add2(b,”two”); add2(b,”three”); } int main() { char **keys[2] = {0}; int i,j; add1(keys); […]

二维数组和指针

我有以下代码片段: char board[3][3] = { {‘1′,’2′,’3’}, {‘4′,’5′,’6’}, {‘7′,’8′,’9’} }; printf(“address of board : %p\n”, &board); printf(“address of board[0] : %p\n”, &board[0]); 两个printf()语句都打印相同的值: 0x0013ff67 据我所知,board(ie)数组名称代表第一个子arrays(即) board[0]和地址 board[0]表示第一个数组中的第一个元素的地址(即) board[0][0] 为什么我在所有printf()语句中都获得相同的地址? 我希望两种语句都有不同的地址。 我对这些东西很新,并且不理解这种行为。 请赐教。

在动态分配的2Darrays上使用realloc()是个好主意吗?

我主要对缩小这样一个数组的可行性感兴趣。 我正在开发一个项目,我在其中使用单个malloc()调用来创建各个中等大小的2D数组。 (每个只有几十个MiB,最大的。)事情是,在其中一个arrays的生命周期中,其内容大小缩小(超过一半)。 显然,我可以在程序的生命周期中单独保留数组大小。 (它只有一个具有GiB RAM的系统上的x MiB。)但是,我们正在谈论超过一半的分配空间在程序终止之前就被废弃了,并且,由于我使用的方式的性质数组中,所有幸存数据都保存在一组连续的行中(在块的开头)。 如果我真的不需要它,那么抓住所有RAM似乎是浪费。 虽然我知道realloc()可用于缩小动态创建的数组,但2D数组​​更复杂。 我想我理解它的内存布局(因为我实现了构造它的函数),但这推动了我对语言及其编译器工作的理解的极限。 显然,我将不得不处理行(并处理行指针),而不仅仅是字节,但我不知道所有这些的结果是多么可预测。 并且,是的,我需要使用单个malloc()创建数组。 有问题的对象有几百万行。 我尝试分别使用一个循环到malloc()每一行,但程序总是冻结在大约100,000 malloc()s。 对于后台,我用来构造这些数组的源代码如下: char ** alloc_2d_arr(int cnum, int rnum) { /* ((bytes for row pointers + (bytes for data)) */ char **mtx = malloc(rnum * sizeof (char *) + rnum * cnum * sizeof (char)); /* Initialize each row pointer to the […]

在C ++中将1D数组作为2D数组访问

这困扰了我一段时间。 很多时候,我发现自己制作了一个大缓冲区来保存“最大”的数据量。 这有助于我避免每次下一个数据集的大小发生变化时动态分配和释放缓冲区。 例如,假设我的数组对于实际有用的大小来说太大了,但我知道有用数据的长度。 int amountOfData = 9; char data1D[100] = some data that is only 9 bytes long stored in a 100 byte array 假设我有一个算法,我想在这个使用2D数组索引的数据集上运行。 所以我希望能够按如下方式访问数据: cout << "I am accessing this data as a 2D array: " << data1D[0][1] << endl; 让我们说这个算法我知道2D数组的xlength和ylength将是: int xlength = 3; int ylength = 3; 对于此迭代,因为amountOfData = 9 […]

如何获得双指针指向的2D数组的大小?

我试图从指向数组的双指针获取2D数组的行数和列数。 #include #include void get_details(int **a) { int row = ??? // how get no. of rows int column = ??? // how get no. of columns printf(“\n\n%d – %d”, row,column); } 上面的function需要打印大小的细节,哪里出错了。 int main(int argc, char *argv[]) { int n = atoi(argv[1]),i,j; int **a =(int **)malloc(n*sizeof(int *)); // using a double pointer for(i=0;i<n;i++) a[i] […]

如何动态分配二维数组

我想在C中制作一个二维数组。 例如,我创建一个名为place的int类型变量,如下所示: int *place; 我有一个游戏,它有变量,如行和列。 我希望我的place变量是一个二维数组,动态分配它的行和列(对于数组的最大大小),在“普通”声明中看起来像这样: place[rows][columns]; 但我不知道如何用动态分配来做到这一点。 对于一维数组我会这样做: place = (int*) malloc (levels * sizeof(int)); 但我不知道如何用2D数组做到这一点。 编辑: 我如何为char而不是int重写这个? 我试图用chars覆盖整数,但它不起作用。