数学建模社区-数学中国

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

作者: xxb1922    时间: 2005-4-23 20:06
标题: [原创]有关指针与二维数组
<>定义一个二维数组和一个同类型的指针
" f! W# [5 s$ D  W/ N: A/ c如: int  a[10][10],*p=a;
( x8 R/ b" b! T, L, w然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>5 u1 L8 P  j, B( B, I$ g
<>; v& z) C/ G+ M* g1 D4 Q. G: Z0 {6 r- d
我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以
, e( k7 J* M9 y( Bpa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请! }; n7 J, k* s" p
大家来各自己发表意见。6 z! O1 e4 Z- K, l* |( A4 V
本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>
3 \. X" V' q( F8 e1 t
; N2 f' J/ B4 ^/ [9 U4 i<>下面这个程序是正确的:</P>
3 }1 Z+ G9 ~; W. X9 m<>main()
6 T/ |' l0 f% E1 E{ int a[10][10],*pa=a,i,j,m;
4 m" c# K5 V" C9 J3 w* v3 ]! W# d  for(i=0,m=0;i&lt;10;i++)
6 K: E$ H; P- N3 \    for(j=0;j&lt;10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);}! I# U6 v% }9 E% y' z
    } </P>
4 Y# i7 Q% |# ]' k<>  4 n- h, C, J( t5 U. h" a. H
   1   2   3   4   5   6   7   8   9  10
: S* ?5 T' K8 v6 L- `  11  12  13  14  15  16  17  18  19  20$ }0 s# M! a) }- e8 m
  21  22  23  24  25  26  27  28  29  30
( j' b/ a' e  j' b$ M- a  31  32  33  34  35  36  37  38  39  40
7 N: _, x. n$ k2 Q8 r  41  42  43  44  45  46  47  48  49  50" k/ m0 c. M4 B" G& k2 c$ v& S! @
  51  52  53  54  55  56  57  58  59  60: u2 ]7 E) k: z- V, t
  61  62  63  64  65  66  67  68  69  70
; ~4 H. b$ U2 `& m4 v7 e. c  71  72  73  74  75  76  77  78  79  808 B; I  e5 I- B
  81  82  83  84  85  86  87  88  89  90
. v. [6 {. d; k$ A. C* b: ^8 k2 a  91  92  93  94  95  96  97  98  99 100) v$ q- [$ j: a) U
. w+ d0 J7 l6 X$ n/ ^! O
这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>
3 m  S, V8 x8 w/ _) H<>
) n; O2 `! x( @$ c但是循环控制无法使用for(;p&lt;a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p&gt;a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p&lt;a+100时则一次都不循环。
) k( t7 ]" S0 V- j1 Emain()+ v6 {9 q0 Q  ]- R' M
{ int a[10][10],*p=a,i,j,n,m;1 J! f8 _$ S9 V& y( F0 m& K
  printf("%d\n",p-a);, y- n. y% s* Z( ^8 }
  for(i=0;i&lt;100;i++,*p=i,p++); printf("%d\n",p-a);   printf("%d\n",i);; M: J8 L8 @1 w* t# S
  for(i=0,p=a;   i&lt;100   ;i++,p++)printf("%4d",*p);     printf("\n%d\n",i);0 }1 Q$ b( d2 @' r( I. w
}</P>( `' M9 }% r! F9 O

' {( A7 B- u2 h# L, O: 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