arrays - 是否可以从 C 中的二维数组中切片一列

标签 arrays c slice

当我希望从 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/

相关文章:

android - 如何检查数组是否包含特定术语 - Android

arrays - 确定给定点是否会创建岛屿

c - C 中两个动态增长数组的指针复制

python - 由tensorflow中的索引张量指定的切片2d张量

python - 按索引雕刻二维 numpy 数组

java - 如果它是 Java 中的整数数组,如何检查 null 元素?

c - 如何将 asprintf 与 Boehm GC 一起使用?

c - 在循环中使用 scanf() 扫描 CSV 文件在第一行和第二行开始后停止

c - 运行存储在动态允许的内存中的 shellcode

pointers - 为什么我不能使用引用将值附加到结构的 slice 上?