当我希望从 c
中的二维数组中切片一行时,我可以执行以下操作:
void PrintArray(int *arr, int arr_size);
int main(){
int arr[4][4] = {
{10, 13, 56, 66},
{23, 57, 59, 67},
{36, 70, 74, 75},
{40, 75, 80, 91}
};
PrintArray(arr[2], 4);
return 0;
}
void PrintArray(int *arr, int arr_size) {
int i;
for (i = 0; i < arr_size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
打印内容:
36 70 74 75
我想知道是否可以以某种优雅/有效的方式按列执行相同的操作。
我可以转置矩阵并执行相同的操作,但这样做很麻烦。
注意:
我怀疑这可能是不可能的,但我想知道是否有一个更有根据的答案来回答这是否可能。
最佳答案
不存在这样优雅或有效的方法,因为数组本质上是原始内存,但矩阵是应用程序层概念。
碰巧的是,可以通过让数组编号 n 衰减为指向第一个元素的指针来访问由 4 个 int[4]
数组组成的数组,因为这是如何保证项目在内存中布局(从 LS 地址到 MS 地址,“从左到右”)。但是,除了使用 arr[i][j] 访问每个数组项之外,没有特别优雅的技巧可以反过来实现。
值得注意的是,您可以选择在应用程序层上将矩阵创建为 mat [row][col]
或 mat[col][row]
。数组数组的最左侧维度/索引不一定必须与应用程序中矩阵的数学定义相对应。
关于arrays - 是否可以从 C 中的二维数组中切片一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65579082/