数学建模社区-数学中国

标题: [原创]有关指针与二维数组 [打印本页]

作者: xxb1922    时间: 2005-4-23 20:06
标题: [原创]有关指针与二维数组
<>定义一个二维数组和一个同类型的指针  g5 }; X3 F2 p3 z. Q
如: int  a[10][10],*p=a;5 b$ n3 d; X, S2 ^6 ?1 f6 w
然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>1 n3 L- J! Y& P( ?0 |0 E7 C
<>% _& P( i5 W7 ]. I* q8 a
我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以& b* {- t; P6 y+ u0 d: `8 W
pa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请
) p1 \+ C: Q" O8 Y3 ?大家来各自己发表意见。
; O! K, C# Q. s( C, \: i' Q本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>; C% D) z# [' Q( h5 M
! h/ A  D" d/ h' ]) d. ]  G: J0 l
<>下面这个程序是正确的:</P>
3 ]1 d! s6 e" _9 e5 A* p<>main()4 |  L+ E- j* z$ B9 m: x
{ int a[10][10],*pa=a,i,j,m;% r5 l1 c3 H" J4 _$ e, i
  for(i=0,m=0;i&lt;10;i++)
6 ?" i$ W4 t) w: C4 h2 i. t    for(j=0;j&lt;10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);}
  ]* ^2 N* W6 }$ v# M9 C2 @    } </P>' ]% L0 A  h% ?, \$ @
<>  
4 v4 @. g) f% u' p   1   2   3   4   5   6   7   8   9  10. b+ e' z0 h+ B+ g) J' f" ]
  11  12  13  14  15  16  17  18  19  20! p- M& x$ h  q! J: h' M
  21  22  23  24  25  26  27  28  29  30: f$ ~9 z: p/ G% E  Q
  31  32  33  34  35  36  37  38  39  404 r/ x) U1 e2 T+ Q  R+ \; p4 H; f
  41  42  43  44  45  46  47  48  49  50
! Z( D% J3 Z0 w5 E, B9 `3 `! ]  51  52  53  54  55  56  57  58  59  60
; K2 R( p& [8 l; D' w3 m  61  62  63  64  65  66  67  68  69  70
3 x4 D1 }' ?& j" ?! M  v) j  71  72  73  74  75  76  77  78  79  80
: Q) |, U8 z- Y  j5 R5 H$ a  81  82  83  84  85  86  87  88  89  90
2 ~5 W6 V3 `$ d1 z- g1 w7 C+ c  91  92  93  94  95  96  97  98  99 100/ M* ], e$ S" a# O( ?
) c4 H2 ?- A4 r9 I0 J& Y2 I
这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>
7 j* {' b; H* K$ W$ F! @<>
5 o8 I4 @- D2 [2 G  j, E; S但是循环控制无法使用for(;p&lt;a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p&gt;a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p&lt;a+100时则一次都不循环。, j! K* R: H$ L1 T2 e. [- j+ y
main()6 P. |: T% G$ v5 j, V3 j
{ int a[10][10],*p=a,i,j,n,m;8 o- \, Y  c/ Q6 E4 ]
  printf("%d\n",p-a);
/ C" n9 A: ^* O  for(i=0;i&lt;100;i++,*p=i,p++); printf("%d\n",p-a);   printf("%d\n",i);
. T+ V" L) \/ d+ c8 C: `+ z* y  for(i=0,p=a;   i&lt;100   ;i++,p++)printf("%4d",*p);     printf("\n%d\n",i);' O" T( O: c1 g
}</P>1 w3 k$ w  \0 _& }9 W

* `! u2 k) H5 y1 J; t& k; @3 i4 v3 F
[此贴子已经被作者于2005-4-23 21:59:02编辑过]

作者: 小菜菜同学    时间: 2005-4-29 17:51
<>是不是*p才是指针所指的数,</P><>而p只是内存地址。——不一定对,呵呵</P>
作者: ilikenba    时间: 2005-4-29 19:53
<>*p是指针所指的空间中所存储的值!p是内存地址!</P>
作者: plgatc    时间: 2005-5-1 20:41
个人认为a+100是a[100]此地址值,是未定义的不确定的值




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5