如何在不使用运算符 [] 的情况下在 C 中打印二维数组?

How to print a 2D-array in C, without using the operator []?

我正在尝试使用 [] 打印二维矩阵,我想像指针一样使用 *
因此,对于一维数组,我会这样做:例如 *(arr+i)matrix[][] 中用于替换的语法是什么?

代码如下:

for (i = 0; i < size; i++)
{
    for (j = 0; j < (size * 2); j++)
    {
        printf(" %5d", matrix[i][j]);
    }
    printf("\n");
}

P.S, 我确实尝试了几件事,例如:

*(matrix+i+j);
*(matrix+i)+*(matrix+j);

当然 none 有效。

感谢您的帮助和时间!

使用*两次。每个 * 基本上可以代替一个 []:

*(*(matrix+i)+j)

你可以试试这个-

*(*(matrix+i)+j)  //reduce level of indirection by using *  

这可能取决于 matrix 是如何分配或传递给函数的。

int A[10][15];

这使用了连续的内存块。要在不使用数组符号的情况下寻址元素,请使用:

        A +(i*15)+j    // user694733 showed this is wrong
((int *)A)+(i*15)+j    // this is horribly ugly but is correct

注意 15,因为每行包含 15 个元素。此处的其他答案中提供了更好的解决方案。

在下面:

int *A[10];

A 是一个包含 10 个整数指针的数组。假设每个数组元素都使用 malloc 分配,您可以在不使用数组符号的情况下对元素进行寻址:

*(A+i) + j;

也就是说,你取 A,然后取第 i 个元素,取消引用它并添加 j 作为第二个索引。

--编辑--

并完成:

int foo(int *p)

这里的函数只是接收一个指向零个或多个整数的指针。该指针指向一个连续的线性内存块,您可以在其中放置一个 n 维数组。函数有多少维以及每个维的上界只能通过参数或全局变量知道。

要寻址 n 维数组的单元格,程序员必须使用上述表示法计算地址 him/herself。

int foo3(int *m, int dim2, int dim3, int i,  int j, int k)
{
    int *cell = m + i*dim3*dim2 + j*dim2 + k;
    return *cell;
}