数学建模社区-数学中国

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

作者: xxb1922    时间: 2005-4-23 20:06
标题: [原创]有关指针与二维数组
<>定义一个二维数组和一个同类型的指针
3 |( a2 y; v8 q' D如: int  a[10][10],*p=a;" ]# h5 M/ A; Z* M- X
然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>' q, [7 I' E- m4 c( c
<>
6 F% v' B& c' s3 B' Z) f3 |6 X我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以
+ e. r( b$ `" `9 \2 H8 Ppa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请
3 y' K# n' w4 H2 s大家来各自己发表意见。
. |4 O  q$ O% p5 @& F, B$ x本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>0 c7 q7 N5 V$ v

- u/ ]& X  f) z) {9 @<>下面这个程序是正确的:</P>
) C3 |2 ?; w4 }8 x9 o<>main()
, N& D& S! d2 F( o{ int a[10][10],*pa=a,i,j,m;
$ {. D& u3 ~$ h  o. N. A7 S  for(i=0,m=0;i&lt;10;i++)) C' }! C2 d: z4 f8 g- p
    for(j=0;j&lt;10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);}! ]8 h9 a! p& h7 |: W0 _+ ^3 i# M" Q
    } </P>
" o1 W8 Q8 c  A! r6 K; Y  J  B% k<>  2 }/ W& j. Y4 O& w2 C
   1   2   3   4   5   6   7   8   9  10
% P( b$ S3 M3 m  11  12  13  14  15  16  17  18  19  20
+ |- O" W2 l% m' n: d/ `& A. \  21  22  23  24  25  26  27  28  29  30: z4 c! b  w. B
  31  32  33  34  35  36  37  38  39  40/ {5 X" v) P+ f4 C  k
  41  42  43  44  45  46  47  48  49  50
6 a. a; o' P( O  `0 a! G  51  52  53  54  55  56  57  58  59  60
# A* j5 B' R3 F8 @* G/ t  61  62  63  64  65  66  67  68  69  70
3 o4 T8 r. n! U: A) ]/ S  71  72  73  74  75  76  77  78  79  804 j2 u: c+ z/ x, o! N( _1 P
  81  82  83  84  85  86  87  88  89  90
4 }% i4 i: V# a2 }& F( r7 M+ f, s  91  92  93  94  95  96  97  98  99 100& o- o: m9 l" \2 Y

6 X2 a9 d! R& X- l7 C  s这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>* S. S* O# H5 e' T" Z3 p0 W: A3 d. ~
<>
# p; w( e. Y: _" m3 ~2 D但是循环控制无法使用for(;p&lt;a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p&gt;a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p&lt;a+100时则一次都不循环。
* k3 d% Z5 X, x1 h; y6 Q) M! Bmain()2 _4 J$ q: P: [' T
{ int a[10][10],*p=a,i,j,n,m;
5 l7 l1 X2 F7 t; a  printf("%d\n",p-a);+ |/ x" Q5 f4 Z8 M5 F0 J7 z) l1 T3 r
  for(i=0;i&lt;100;i++,*p=i,p++); printf("%d\n",p-a);   printf("%d\n",i);$ u5 ]/ ~; U* _  R2 a
  for(i=0,p=a;   i&lt;100   ;i++,p++)printf("%4d",*p);     printf("\n%d\n",i);! T2 R  U; }  Q# [, _8 ]; f/ T% T
}</P>
3 @4 S; e; `3 a# V/ d1 e
. c" R8 z7 {/ X4 X1 k! ~
[此贴子已经被作者于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