- 在线时间
- 0 小时
- 最后登录
- 2005-6-22
- 注册时间
- 2005-4-23
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 65 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 22
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   17.89% 该用户从未签到
 |
< >定义一个二维数组和一个同类型的指针
$ g7 |# [+ n3 `% Z如: int a[10][10],*p=a;
- {5 D" o$ d J) P8 q- m然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>- L7 W' s& p' p- Y4 T- p
< >5 @3 L$ m- [: v, f9 r1 R
我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以 [; K5 I- T4 G3 y+ C6 H
pa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请
1 s$ Q" F7 A5 \9 o) A1 s大家来各自己发表意见。
- _1 H( N: K& F$ ~/ N, n本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>
9 n/ \3 y3 `& Y T* b& |2 T/ |- H" |5 c% `3 r6 i# M P5 U/ `9 y
< >下面这个程序是正确的:</P>
4 s0 l6 s- @0 E6 V< >main()6 G, A4 V) M; [- q, b7 @1 f4 X
{ int a[10][10],*pa=a,i,j,m;
/ U, W- U4 ?5 Z& w7 ~% M" p% y for(i=0,m=0;i<10;i++)
9 [% ?$ l9 D5 q" S* M for(j=0;j<10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);}
2 H& G$ ]( D! H! T4 ?4 l- b } </P>; w: `6 a1 t# g9 Z( O: ~
< >
1 N! j; z- W' j+ b 1 2 3 4 5 6 7 8 9 10: {+ A P! b; M) x0 d
11 12 13 14 15 16 17 18 19 205 q- P6 H, Q& v" A
21 22 23 24 25 26 27 28 29 30
! r6 _: V1 C8 m 31 32 33 34 35 36 37 38 39 40
7 A5 {( Y5 J e7 M 41 42 43 44 45 46 47 48 49 502 R8 o5 ]# Y N& f- o" B
51 52 53 54 55 56 57 58 59 60/ E9 V: ^# f' F1 ?$ A9 q1 o4 K
61 62 63 64 65 66 67 68 69 70# V# D5 S2 q- L2 e7 j
71 72 73 74 75 76 77 78 79 80
7 t* J5 u" C& f 81 82 83 84 85 86 87 88 89 90) t6 T- j9 [3 i* g* e( p/ s5 w* v
91 92 93 94 95 96 97 98 99 100" L) p: u! Q# `* ]
8 z8 j" C4 ~! ~, O" d& ~' w2 M
这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>
" Q# W: V% L3 m4 X, Z1 u< >
: D# \8 b; j& k- ?/ W但是循环控制无法使用for(;p<a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p>a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p<a+100时则一次都不循环。) u9 T/ j8 P+ g: [! ~
main()
! G; W* U% I M6 F0 }* ~ |{ int a[10][10],*p=a,i,j,n,m;
: m7 L1 c* U1 V( L) H printf("%d\n",p-a);
, f1 K3 V# C, E$ o" v for(i=0;i<100;i++,*p=i,p++); printf("%d\n",p-a); printf("%d\n",i);
. j% N1 I' X6 B9 t9 N8 y7 b for(i=0,p=a; i<100 ;i++,p++)printf("%4d",*p); printf("\n%d\n",i); t* ~5 `$ o' o+ p1 F V- r
}</P>
# I& }+ e& @: E9 k! T8 Q: ~3 x# t8 m8 s) \+ F" r
[此贴子已经被作者于2005-4-23 21:59:02编辑过] |
zan
|