- 在线时间
- 0 小时
- 最后登录
- 2005-6-22
- 注册时间
- 2005-4-23
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 65 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 22
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   17.89% 该用户从未签到
 |
< >定义一个二维数组和一个同类型的指针
& y/ r' l$ G$ g1 n) W# |& e, m如: int a[10][10],*p=a;
+ n& G& U: H" v( U6 \! [0 n2 S然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>$ b# ?- d K' Y; L& P" ~* P$ I ^
< >
; M. B# p: }. Z* t9 N- \0 q8 O我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以
! x% [: N" s; x3 B' ?pa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请
5 B; K+ ~* T8 i% b大家来各自己发表意见。: s+ z1 B# c- I
本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>; `1 d+ W8 n0 p7 z( D2 j% Q
: q# q( H+ j0 \) S, p8 f9 @: i
< >下面这个程序是正确的:</P>
* u- `3 f* w9 ] ?% A, J X$ w& I+ ?< >main()4 p# U3 |: u% K) d9 n: U: S! A) x
{ int a[10][10],*pa=a,i,j,m;! {0 |4 p& }; J7 F
for(i=0,m=0;i<10;i++)9 j# |* W* l) A) t0 [. Q; K8 G
for(j=0;j<10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);}
7 N! G6 e. Z0 ~6 e1 t' D } </P>
/ B& |. p! D( j0 W" N< >
( F, E- n- z! _) \2 a) z0 F 1 2 3 4 5 6 7 8 9 10
3 l, B2 I. G3 ?6 r2 T 11 12 13 14 15 16 17 18 19 20
! s) T! P: x) d. n+ v' j c5 Z' m 21 22 23 24 25 26 27 28 29 30
/ r) ]. K7 j* z* k3 l: |/ u 31 32 33 34 35 36 37 38 39 40
) z/ E6 Q2 E1 H 41 42 43 44 45 46 47 48 49 508 g4 B- `7 F" F- b, |+ }' j+ X
51 52 53 54 55 56 57 58 59 60
- c& H5 J1 H9 x# q8 L% i& u 61 62 63 64 65 66 67 68 69 70
! S7 r$ l; m# Y+ V5 V( Y 71 72 73 74 75 76 77 78 79 80
o# z7 X6 m$ y# y 81 82 83 84 85 86 87 88 89 90 ?2 ]& n& h+ b9 H
91 92 93 94 95 96 97 98 99 100
9 l) f: V. D# k0 t) v' [: d
. g# w( L9 V' A% j6 K/ z K这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P># g; q% [' b9 V3 q' n
< >5 D9 S% O" _( I. t$ n5 \* H) X0 _
但是循环控制无法使用for(;p<a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p>a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p<a+100时则一次都不循环。
2 h) O1 K$ Y( k7 L q4 ]1 pmain()
9 U* z. s1 F# [" @{ int a[10][10],*p=a,i,j,n,m;; a7 a% ^. B- P5 Z+ w
printf("%d\n",p-a);
, u& w0 m: m7 N" N for(i=0;i<100;i++,*p=i,p++); printf("%d\n",p-a); printf("%d\n",i);; O' u8 ]: t& S% A( D
for(i=0,p=a; i<100 ;i++,p++)printf("%4d",*p); printf("\n%d\n",i);
% v6 Y3 ~) Z+ t4 g2 Z2 O$ K# w3 d}</P>
" o! ~# x% G. c: R2 x" T" z+ I( _% @6 S
[此贴子已经被作者于2005-4-23 21:59:02编辑过] |
zan
|