如何在不使用运算符 [] 的情况下在 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;
}
我正在尝试使用 []
打印二维矩阵,我想像指针一样使用 *
。
因此,对于一维数组,我会这样做:例如 *(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;
}