【发布时间】:2015-05-05 13:15:43
【问题描述】:
给定以下C-code:
#include <stdio.h>
int mat1[2][4] = {
{9, 10, 11, 12},
{13, 14, 15, 16}
};
int (*(transpose)(int matrix[][4]))[2] {
static int mat[4][2];
int i;
int j;
printf("I am the function transpose()\nand I'm transposing 2x4 matrices.\n\n");
for (i = 0; i < 2; i++) {
for (j = 0; j < 4; j++) {
mat[j][i] = matrix[i][j];
}
}
return mat;
}
int main() {
int (*mat_transpose)[2];
int i;
int j;
mat_transpose = transpose(mat1);
for (j = 0; j < 2; j++) {
for (i = 0; i < 4; i++) {
printf("mat_transpose[%d][%d] = %d\n", i, j, mat_transpose[i][j]);
}
}
return 0;
}
函数transpose() 返回一个二维数组(或者更确切地说是指向指针数组的指针,我猜。)。这是实现这一目标的有效方法吗?查看各种 Stackoverflow 问题,似乎没有标准的方法可以做到这一点,而是很多。关于返回二维或多维数组是否有一些标准?
【问题讨论】:
-
int (*(transpose)(int matrix[][4]))[2]到底是什么? -
@SouravGhosh 它是一个指向 2 元素数组的指针,该数组本身由 4 个元素组成。
-
一般建议是避免在 C 中使用二维数组(所以使用
arr1d[i*width+j]而不是arr2d[i][j]....)。你可能想要一些flexible array member -
@SouravGhosh;它将
transpose声明为一个函数,该函数需要int (*)[2]类型的参数并返回一个指向int [2]的指针。顺便说一句,为更好地理解指针的问题 +1。
标签: c arrays multidimensional-array