从二维数组中获取一维数组

Getting one-dimensional arrays from a two-dimensional array

我有一个像

这样的数组
int outer[4][3] = {
    { 1, 2, 3 },
    { 2, 3, 5 },
    { 1, 4, 9 },
    { 10, 20, 30 }
};

我想为 outer 中的第 n 个一维数组得到一个 pointer/array,类似于

void foo () {
    printf("%d %d %d\n", outer[1][0], outer[1][1], outer[1][2]);
    int inner[3] = outer[1]; /* Is there some way to do this assignment? */
    printf("%d %d %d\n", inner[0], inner[1], inner[2]);
    /* so that this line gives the same output as the first */
}

当然这可以用指针数学来实现,但我觉得我忘记了一些语法。

对于指向数组的指针,将inner声明为指向3个数组的指针int

int (*inner)[3] = &outer[1]; 


如果你想要一个指向数组第一个元素的指针 outer[1] 那么

int *inner = outer[1];  

会完成这项工作。你也可以做

int *inner = &outer[1][0];