数学建模社区-数学中国

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

作者: xxb1922    时间: 2005-4-23 20:06
标题: [原创]有关指针与二维数组
<>定义一个二维数组和一个同类型的指针
' s! p$ A! d" S' o" `( V1 J& p如: int  a[10][10],*p=a;
8 f4 M& n0 E: H/ ?然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>4 ]7 G. s: h* M+ m: e3 ^
<>  t$ G, I. x) `# P; E% l- Z8 H( k3 |3 f0 `
我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以) {' P1 V" y  M3 o1 M, k% D5 a; [
pa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请/ M$ k2 R# X8 X, i( V0 H
大家来各自己发表意见。
, H" M9 j. r8 O5 \本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>
5 H. U; X' O* j1 S, S1 v- s) F- V' a+ k$ v4 \2 K. K
<>下面这个程序是正确的:</P>
/ Q9 y$ R, U7 w- F. V' e2 q/ o<>main(); f* l! x# x5 X  ?% d* U7 N
{ int a[10][10],*pa=a,i,j,m;) V8 r% E5 y) H  P5 z- i; j, h
  for(i=0,m=0;i&lt;10;i++)
, `" R& A- W; k- @( V: O' g7 E    for(j=0;j&lt;10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);}
5 b+ C3 n6 d- ?$ S    } </P>) z- R3 U' x: r4 y! B, f6 I
<>  4 X! P1 C9 {  \3 u$ c
   1   2   3   4   5   6   7   8   9  103 H" L1 B! ]6 p; R# e
  11  12  13  14  15  16  17  18  19  20
/ o7 W$ n* A% N) m1 o5 p* h( B+ \  21  22  23  24  25  26  27  28  29  30
# l& v) D8 I. |/ U* y) w5 l  31  32  33  34  35  36  37  38  39  40: {$ U9 b. d4 \) {. O
  41  42  43  44  45  46  47  48  49  50
: L0 Y: Q  k# ^: h) _2 G! B  51  52  53  54  55  56  57  58  59  601 S% ~  f1 i, k
  61  62  63  64  65  66  67  68  69  70
* O0 U% e0 |: z3 J  71  72  73  74  75  76  77  78  79  800 a$ O1 M. k, K6 ]
  81  82  83  84  85  86  87  88  89  90: q* |: ]0 H5 _+ g$ W- E0 D
  91  92  93  94  95  96  97  98  99 100( t$ ?7 `0 U! I2 o1 A

- E9 E3 Q$ g/ H/ v$ V9 o7 \这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>! ^' ], m/ N7 \. n2 ?" _: k7 U
<>4 W5 X8 Y& m* s8 s9 Q) l# i
但是循环控制无法使用for(;p&lt;a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p&gt;a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p&lt;a+100时则一次都不循环。
5 w! V, r2 R: v6 ?: \; J+ P+ Q! ?main()2 }1 Y# h/ S5 i6 S3 u5 D) P  _
{ int a[10][10],*p=a,i,j,n,m;
8 ~( y# r6 Y# r  printf("%d\n",p-a);5 X* \1 \' _; v! k1 b% U
  for(i=0;i&lt;100;i++,*p=i,p++); printf("%d\n",p-a);   printf("%d\n",i);1 Z: U; r4 R1 x% U. _
  for(i=0,p=a;   i&lt;100   ;i++,p++)printf("%4d",*p);     printf("\n%d\n",i);
8 w% Q2 F1 `7 z! W; ]}</P>6 x  ~; y# V& C! s# W
& R- S+ ^* [. l% a+ N
[此贴子已经被作者于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