我正在尝试使用 []
打印 2D 矩阵,相反,我想像指针一样使用*
。
所以对于一维数组,我会这样做:例如*(arr+i)
。matrix[][]
中用于替换的语法是什么?
代码如下:
for (i = 0; i < size; i++)
{
for (j = 0; j < (size * 2); j++)
{
printf(" %5d", matrix[i][j]);
}
printf("n");
}
附言,我确实尝试了几件事,例如:
*(matrix+i+j);
*(matrix+i)+*(matrix+j);
当然,这些都不起作用。
感谢您的帮助和时间!
使用*
两次。*
中的每一个基本上都会取代一个[]
:
*(*(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维数组的单元格,程序员必须使用上述符号自己计算地址。
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;
}