氧气瓶的价格:关于c程序的问题~

来源:百度文库 编辑:高考问答 时间:2024/05/06 04:29:20
指向二维数组的指针变量
main()
{
int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
int (*p)[4];
int i,j;
p=a;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%2",*(*(p+i)+j));
printf("\n");
}
}
老师要我给同学们讲解这个程序,但我学艺不精,还望高手指点一下该如何讲解大家才能听的懂~
越详细越好~(我是c程序的初学者)谢谢各位了!!

首先你这个程序是不对的
printf("%2",*(*(p+i)+j));
好象没有办法输出%2这个吧,呵呵
不知道原程序是不是%2d.
我就当做%2d来讲吧.
int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
int (*p)[4];
int i,j;
这段应该明白吧,变量和指针的定义.
p=a; 这里a是指数组a的头指针,所以是把a数组的头指针赋给了指针p.
那么p指针所指的数值是a1的值.
再来看
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%2d",*(*(p+i)+j));
printf("\n");
}
2个FOR循环的作用是把12个数分3行输出,每行4个因为是%2d输出所以每行中每个数的间隔是1个单位空格.
那么这个循环先执行i=0,j=0然后带入*(*(p+i)+j)这个式子中输出
(解释下这个式子先 :*(p+i)+j是一个指针地址*(*(p+i)+j)就是这个地址所指向的数值.)
之后就按照
i=0,j=1;
i=0,j=2;
i=0,j=3;
i=1,j=0;
.....
一直到i=2,j=3;结束输出
其中当j循环一次以后会执行一个
printf("\n");
作用是换行.所以最后的输出答案是:
0 1 2 3
4 5 6 7
8 9 10 11

不知道有没有什么没说清楚或者说错的,请大家指出.

看不懂不要紧的
自己多看看就知道了
看书至少也得10遍才能看懂的
要有耐心

这个很简单的例子嘛
就是一个二维数组,定义两个变量I,J;分别来控制行和列,使用指针来控制,在用个FOR循环就OK咯撒

joji789 -