Tag: 多维数组

在C中调整2D数组的大小

目前我正在尝试使用此代码片段在C中调整2D数组的大小 array = (int**) realloc(array, s * 2 * sizeof(int)); 其中s是行和列中数组的大小。 但是,当试图像这样访问数组的新区域时, array[3][0] = x; 我只得到一个段错误。 arrays的旧区域工作正常。 我该如何解决这个问题?

使用双指针实现二维数组

请考虑以下代码: #include #include #define NUM_ARRAYS 4 #define NUM_ELEMENTS 4 #define INVALID_VAL -1 int main() { int index = INVALID_VAL; int array_index = INVALID_VAL; int **ptr = NULL; ptr = malloc(sizeof(int*)*NUM_ARRAYS); if (!ptr) { printf (“\nMemory Allocation Failure !\n\n”); exit (EXIT_FAILURE); } for (index=0; index<NUM_ARRAYS; index++) { *(ptr+index) = malloc(sizeof(int)*NUM_ELEMENTS); if (!*(ptr+index)) { printf ("\nMemory Allocation […]

在C程序中的函数中传递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"); } }

如何在C中制作动态大小的数组?

我已经习惯了PHP,但我开始学习C.我正在尝试创建一个逐行读取文件并将每行存储到数组的程序。 到目前为止,我有一个逐行读取文件的程序,甚至可以打印每行,但现在我只需要将每行添加到数组中。 我的朋友昨晚告诉了我一些关于它的事。 他说我必须在C中使用多维数组,所以基本上是array[x][y] 。 [y]部分本身很简单,因为我知道每行的最大字节数。 但是,我不知道该文件将有多少行 。 我想我可以让它循环遍历文件,每次只增加一个整数并使用它,但我觉得可能有一种更简单的方法。 任何想法甚至暗示正确的方向? 我感谢任何帮助。

使用涂料矢量来访问多维数组的任意轴向切片?

我正在构建一组函数来处理多维数组数据结构 ,我希望能够定义数组的任意切片 ,这样我就可以实现两个任意矩阵(又名Tensors或nd数组 )的广义内积。 我读过的一篇APL论文(我老实说找不到哪篇 – 我读过这么多篇幅)定义了左边矩阵X上的矩阵乘积,其尺寸为A;B;C;D;E;F和右矩阵Y尺寸G;H;I;J;K其中F==G as Z <- X +.× Y Z[A;B;C;D;E;H;I;J;K] <- +/ X[A;B;C;D;E;*] × Y[*;H;I;J;K] 其中+/是和的和 ,并且×将逐个元素应用于两个相同长度的向量。 所以我需要左边的“行”切片和右边的“列”切片。 我当然可以使用转置,然后使用“行”切片来模拟“列”切片,但我宁愿更优雅地做。 维基百科关于切片的文章引出了关于涂料载体的存根,这似乎是我正在寻找的奇迹治疗方法,但是没有太多可以继续下去。 如何使用涂料矢量来实现任意切片? (很久以后我注意到Stride的一个数组有一些细节。)

如何为2Darrays动态分配连续的内存块

如果我像这样分配一个二维数组[N] [N] ; 它将分配一个连续的内存块。 但是,如果我尝试动态这样做: int **a = malloc(rows * sizeof(int*)); for(int i = 0; i < rows; i++) a[i] = malloc(cols * sizeof(int)); 这样可以在行中的元素之间保持单位跨度,但行之间可能不是这种情况。 一种解决方案是从2D转换为1D,除此之外,还有另一种方法吗?

关于指针和多维数组的困惑

如果可能的话: MyFunction(int *array, int size) { for(int i=0 ; i<size ; i++) { printf(“%d”, array[i]); } } main() { int array[6] = {0, 1, 2, 3, 4, 5}; MyFunction(array, 6); } 为什么以下不是? MyFunction(int **array, int row, int col) { for(int i=0 ; i<row ; i++) { for(int j=0 ; j<col ; j++) { printf(“%d”, array[i][j]); […]

如何使用动态分配的任意维数组?

典型的1-D数组可以在声明中静态或自动分配。 enum { n=100 }; int arr1[n]; 或者通过指针动态分配和访问。 int *arr1m=malloc(n*sizeof*arr1m); int *arr1c=calloc(n, sizeof*arr1c); 这两种样式都使用相同的语法访问元素。 int i = n/2; arr1[i] = arr1c[i] = arr1m[i] = 42; 但是当你添加第二个维度时,需要花费一些力气来实现相同的语法。 int arr2[n][n]; int *arr2c=calloc(n*n,sizeof*arr2c); arr2[5][5] = arr2c[5*n+5] = 23; 如果您将其构造为Iliffe向量,则只能获得双重括号。 int **arr2l=calloc(n,sizeof*arr2l); for (int j=0; j<n; j++) arr2l[j]=calloc(n,sizeof**arr2l); arr2[6][6] = arr2l[6][6] = 72; 但随着尺寸的增加,这变得越来越麻烦。 另一个困难是在访问元素之前检查动态数组的边界(这样您就不会触及未正确分配的内存)。 真实数组可以使用sizeof运算符来确定边界,但这些动态数组中没有一个带有它们的大小。 如何定义具有快速,连续布局的结构,如数组,但具有一致的语法,用于访问具有索引列表的元素,这些索引对于2Darrays和3Darrays的工作方式相同; 并动态地,动态地提供大小,以便它们可以传递给函数并从函数返回?

C中二维数组的内存映射

您认为关于2Darrays的内存映射的讨论是正确的吗? 特别是这张照片? 你能解释一下这个理论吗? 假设我们在C中声明一个2D数组,如下所示: int arr[3][3]={10, 20, 30, 40, 50, 60, 70, 80, 90}; 现在,根据这个讨论,内存将按如下方式排列: 现在,我编写了以下代码来测试这个理论: #include main() { int arr[3][3]={10, 20, 30, 40, 50, 60, 70, 80, 90}; printf(” arr==%d\n”, arr); printf(” &arr[0]==%d\n”, &arr[0]); printf(” arr[0]==%d\n”, arr[0]); printf(“&arr[0][0]=%d\n”, &arr[0][0]); printf(” arr[0][0]=%d\n”, arr[0][0]); } /* Output: ======== arr ==1245028 &arr[0] ==1245028 arr[0] ==1245028 &arr[0][0]==1245028 arr[0][0]==10 […]

在C / C ++中,char * arrayName 是指向指针的指针还是指向指针的指针?

我理解多维数组作为指针的指针,但也许我错了? 例如,我虽然: char * var = char var[] char ** var = char* var[]或char var[][] char *** var = char var[][][]或char* var[][]或char** var[] 这不正确吗? 我很困惑,因为我在简单的教科书示例中看到了char * [] []演员作为char **。 我粘贴了下面的例子。 任何人都可以为我清除这个吗? 谢谢! /* A simple dictionary. */ #include #include #include /* list of words and meanings */ char *dic[][40] = { “atlas”, “A volume of […]