Tag: 多维数组

使用指针表示法在C中访问多维数组

设a是10个整数的一维数组,如下所示 int a[10]; 并为上面声明的数组表达式 a[i] 被评估为*(a + i)并给出存储在第i个索引处的值,例如 int a[5]={1,2,3,4,5}; 这里a [3]被评估为*(a + 3) ,它等于4 ,即存储在数组a的 第3个索引处的元素的值。 但是像这样的2Darrays的情况 int b[2][3]={ {1,2,3},{4,5,6} }; (这里我认为2D数组b是1D数组的数组,即b是具有2个元素的1D数组,每个元素本身是3个int的1D数组)如果我们使用带有数组名称的单个下标运算符 b[i] i = 1的上述表达式给出了存储元素4的地址,所以 在b是2D数组的情况下,如何计算表达式b [i] ? 在b是2D数组的情况下,如何计算表达式b [i] [j] ? 如何使用指针访问C中的多维数组元素。 在这里,我想了解编译器如何在内部处理多维数组? 如果b是2D数组, b会评估什么?

在C中创建一个int数组?

让我们说我有以下方法原型: void mix_audio(int *vocal_data_array, int *instrumental_data_array, int *mixed_audio_array, FOURTH ARGUMENT) { } 我怎么样: 在上面的参数之前初始化一个array_of_arrays,以便将它作为第四个参数传递? 在该方法中,使其成为我的array_of_arrays的第一个值是名为vocal_data的数组,我的数组的第二个值是instrumental_data_array,第三个值是mixed_audio_array。 之后我将如何循环遍历array_of_arrays中第一个数组的所有值。 我希望我在这里不要求太多。 我只是觉得有人可以很快吐出来的语法很简单:) 谢谢! 编辑1 请注意,虽然我已经通过我的示例展示了一个长度为3的array_of_arrays,但实际上我正在寻找可以包含可变长度数组的东西。

指针指针和指向2d数组的指针之间的区别

如果我有一个2d数组B定义为: int B[2][3] = {{1,3,5},{2,4,6}}; int **p = B与int (*p)[3] = B吗? int **f = B; printf(“%d “,*f+1); 输出5作为输出,而printf(“%d “,*f)给出1作为答案。 为什么会这样? printf(“%d “,**f); 返回分段错误! 为什么?

C,多维数组:元素是一维数组的数组?

这个陈述是否有意义,请参阅“ C编程:现代方法”,第269页第2版 正如一维数组的名称可以用作指针一样, 任何数组的名称也可以使用,无论它具有多少维度。 但是,需要注意一些事项。 考虑以下数组: int a[NUM_ROWS][NUM_COLS]; a 不是指向a[0][0];的指针a[0][0]; 相反,它是指向a[0]的指针。 如果我们从C的角度来看它会更有意义,它不是将二维数组视为二维数组,而是将元素视为一维数组的一维数组。 当用作指针时, a具有类型int (*) [NUM_COLS] (指向长度为NUM_COLS的整数数组的NUM_COLS )。 我很困惑,因为当我认为“其元素是一维数组的数组”时,我认为是一个锯齿状数组 ,但这不是这里发生的事情..这更像是一个带指针算术的宏? 这是参考类型系统以及它如何处理多维数组? 任何人都能解释一下吗?

C ++ – 数组的初始化程序太多

我已经制作了这样的数组但是它一直说我有太多的初始化器。 我该如何解决这个错误? int people[6][9] = {{0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}, {0,0,0,0,0,0}};

如何在C中声明可变大小的2D数组?

我的项目有问题。 我必须制作一个可变大小的2D数组来存储一些预测误差。这是关于图像的。 麻烦的是我必须加载不同大小的图像,所以对于每个图像,我必须进入一个文件,相应的像素数的二维数组..我在你的问题中搜索,但它不是我在看什么for.Can有人帮助我吗? 谢谢

指向连续2D数组的指针

我正在使用gcc版本4.8.0和标志-Wall -std=gnu99 。 我需要在C中使用malloc为连续的2D数组动态分配内存; 这个事实是不可谈判的。 但是,为了便于使用,我仍然希望能够使用方便的x[r][c]表示法访问数组。 这是我勇敢尝试创建指向连续2D数组的指针并通过执行*array[r][c]索引数组: #include #include int main(void) { size_t rows = 3, cols = 5; printf(“sizeof(int) = %li\n\n”, sizeof(int)); int (*array)[rows][cols] = malloc(sizeof(int) * rows * cols); printf(“array starts at %p\n”, array); printf(“sizeof(array) = %li\n”, sizeof(array)); printf(“sizeof(array[0][0]) = 0x%lx\n”, sizeof(array[0][0])); puts(“”); unsigned short r, c; for (r = 0; r <= […]

如何将多维C数组传递给函数?

我正在学习大学课程中的C和指针,我认为除了多维数组和指针之间的相似性之外,我对这个概念有很好的把握。 我认为,因为所有数组(甚至是多维数组)都存储在连续的内存中,你可以安全地将它转换为int* (假设给定的数组是一个int[] 。)但是,我的教授说明星中的星数。定义取决于数组中的维数。 因此, int[]将成为int* , int[][]将成为int**等。 所以我写了一个小程序来测试这个: void foo(int** ptr) { } void bar(int* ptr) { } int main() { int arr[3][4]; foo(arr); bar(arr); } 令我惊讶的是,编译器在两个函数调用上发出警告。 main.c:22:9: warning: incompatible pointer types passing ‘int [3][4]’ to parameter of type ‘int **’ [-Wincompatible-pointer-types] foo(arr); ^~~ main.c:8:16: note: passing argument to parameter ‘ptr’ here void foo(int** […]

我可以在C中创建一个Char指针数组吗?

我是C的新手,C中的事情与我学到的任何其他语言不同。 在我的作业中,我想创建一个指向一个字符数组的字符数组,但不是创建一个多维字符数组,我想我会有更多的控制并创建字符数组,并将每个字符放入索引中。原始字符数组: char keywords[10]; keywords[0] = “float”; 上面的例子是澄清一个简单的案例。 但我的问题是由于我一直在做的研究,我对某些事感到困惑。 通常这可以在其他语言中使用,但在C中它将是: char *keyword[10]; keywords[0] = “float”; 但是当我想通过函数发送它时,为什么这是必要的: void function(char **keyword); //function prototype 不只是传递数组指针就足够了吗?

如何在运行时创建C中的二维数组

我无法从2个变量创建2D数组(例如int arr[i][j]不允许),那么如何创建动态大小的2D数组呢? 数组的维度仅在我的程序中在运行时已知。 该数组用于表示网格。 我将如何在C中编码?