C语言!这段程序的过程是怎样的 往高人指点跪谢!

来源:百度知道 编辑:UC知道 时间:2024/06/05 02:53:53
{
int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},(*p)[3],i=0,j=0;
p=a;
for(i=0;i<3;i++)
for(j=0;j<2;j++)
printf("%d",*(*(p=i)+j));
}

我看不懂:
printf("%d",*(*(p=i)+j));
里面的"p=i"是什么?

如果是你写错的话,那它是否是"p+i"?

以下解释均是以"p+i"代替"p=i"后的想法:
数组a的实际赋值为{[1,2,3],[4,5,6],...},对应位置的规则是:先满足最低级的下标数值,即A[m][n]要先满足的是n的数值.

而*(*(p+i)+j)则相当于a[i][j],因为p指向的是a的地址,而数组a是二维数组,则*(*(p+i)+j)指向的第一维是第i个元素(该元素是数组,即对应的是数组a中的"[1,2,3]"),而指向的第二维是第j个元素(该元素是数值,即对应第一维元素(类似"[1,2,3]")中的某一数值)

综合上述,如果用"p+i"代替"p=i"后的运行结果为: 124578

如果你没有写错的话,那我无法确认其输出是什么,什么过程更是不清楚. 不过应该不会提示错误,因为看不到基本的语法错误.

不明白你的这个程序想干什么!

矩阵是4×3的,运行你的程序输出3×2的矩阵的,前3行的前2列,就是这样。

printf这行,p=i是不能这样写的,一个为二维数组的指针,一个是整型的,不能这样写,我估计你是想写+号,写错了吧,

[0][0],[0][1]一直到[3][2]