c(问题)
#include<stdio.h>
void main()
{
int a[3][2]={0},(*ptr)[2],i,j;
for(i=0;i<2;i++)
{ ptr=a+i;
scanf("%d",ptr);
ptr++;
}
for(i=0;i<3;i++)
{
for (j=0;j<2;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}问题:(*ptr)[2]是什么意思,
问题:输出为10 20 00,不知道这个过程是怎么样的
参考答案:(*ptr)[2]的意思笼统的来讲就是*ptr这个指针指向个数组,而此数组有2列,ptr是指向每行的首部,也就是第一个数,ptr如果自加一的话,就指向下一行。
ptr=a+i; 让ptr指向了第一行的第一个位置。scanf("%d",ptr); 输入了1给ptr和a[0][0]。ptr++; 后ptr指向了第二行,通过循环语句i边为了1,ptr=a+i;把a第二行的第一个值赋给了ptr,scanf("%d",ptr); 把2赋给了ptr和a[1][0].然后ptr++; 让ptr指向了第三行,但是i在加一后,不符合for的条件,所以跳出了循环。
for(i=0;i<3;i++)
{
for (j=0;j<2;j++)
printf("%2d",a[i][j]);
printf("\n");
是用来输出a的值的。前一次的循环,只改变了a[0][0]和a[1][0]的值,所以除了这两个值分别边为1,2,别的仍是0。