[原创]有关指针与二维数组
<P>定义一个二维数组和一个同类型的指针如: int a,*p=a;
然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b那样的吗?</P>
<P>
我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以
pa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请
大家来各自己发表意见。
本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>
<P>下面这个程序是正确的:</P>
<P>main()
{ int a,*pa=a,i,j,m;
for(i=0,m=0;i<10;i++)
for(j=0;j<10;j++,m++,pa++){ a=m; printf("%d ",*pa);}
} </P>
<P>
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>
<P>
但是循环控制无法使用for(;p<a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p>a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p<a+100时则一次都不循环。
main()
{ int a,*p=a,i,j,n,m;
printf("%d\n",p-a);
for(i=0;i<100;i++,*p=i,p++); printf("%d\n",p-a); printf("%d\n",i);
for(i=0,p=a; i<100 ;i++,p++)printf("%4d",*p); printf("\n%d\n",i);
}</P>
[此贴子已经被作者于2005-4-23 21:59:02编辑过] <P>是不是*p才是指针所指的数,</P><P>而p只是内存地址。——不一定对,呵呵</P> <P>*p是指针所指的空间中所存储的值!p是内存地址!</P> 个人认为a+100是a此地址值,是未定义的不确定的值
页:
[1]