您的术语到处都是。我认为回答您的问题的最简单方法是逐行浏览您的代码。
int main()
{
int t1[4]={0,1,2,3}; //Declares a 4 integer array "0,1,2,3"
int t2[4]={4,5,6,7}; //Declares a 4 integer array "4,5,6,7"
int t3[4]={8,9,10,11}; //Declares a 4 integer array "8,9,10,11"
int t4[4]={12,13,14,15}; //Declares a 4 integer array "12,13,14,15"
int *tab[4]={t1,t2,t3,t4};//Declares a 4 pointer of integers array "address of the first element of t1, address of the first element of t2, ..."
int i,j,k,l; //Declares 4 integer variables: i,j,k,l
for (i=0; i<4;i++)
{
printf("%d\t", *tab[i]); //print out the integer that is pointed to by the i-th pointer in the tab array (i.e. t1[0], t2[0], t3[0], t4[0])
}
return 0;
}
在你循环之前,你所做的一切似乎都很好。您只显示每个数组的第一个整数,因为您没有通过它们。要遍历它们,您的代码应如下所示:
for (i=0; i<4;i++)
{
for (j=0; j<4; j++)
{
printf("%d\t", *(tab[j] + i));
}
}
上面的代码使用了两个循环计数器,一个 (the i
) 遍历数组中的位置(数组中的第一个值,数组中的第二个值等);另一个通过不同的数组(j
)。它通过检索存储在其中的指针tab[j]
并创建一个具有正确偏移量的新指针来显示i
第 th 列的值。这称为指针算术(这里有关于指针算术的附加信息)
大多数人发现语法*(tab[j] + i)
很笨拙,但它更能描述实际发生的事情。在 C 中,您可以将其重写为tab[j][i]
,这更常见。