- 在线时间
- 0 小时
- 最后登录
- 2005-6-22
- 注册时间
- 2005-4-23
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 65 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 22
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   17.89% 该用户从未签到
 |
< >定义一个二维数组和一个同类型的指针* \ a& E) Y" ]/ n$ [, C
如: int a[10][10],*p=a;! X" u% j: _) u- o$ y
然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>
+ f' ]6 K2 a1 B8 `: y0 @' ?< >0 t d$ d4 D; y2 K) [0 A* y
我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以
9 W% F( w+ R' i$ H; t) ypa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请8 ]; v* c' o+ G, p6 T, p
大家来各自己发表意见。
$ h; H; s! r& M# }( x2 R9 s本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>4 f) t) N) c) S, O9 U3 ]$ u
3 n# Y4 o5 A" [- P8 o' F
< >下面这个程序是正确的:</P>
8 E/ U" N1 S# _# {" s! }< >main()
. q/ w0 D3 V0 f. a. h' \{ int a[10][10],*pa=a,i,j,m;- l I) Z& M s1 K1 p7 Z+ h9 \; _6 K3 T
for(i=0,m=0;i<10;i++)9 K0 E h3 c5 b
for(j=0;j<10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);} L( F1 o; R7 ` Z' l G
} </P>
f' Z7 g* o3 M< > . I. A1 F2 B" D' u- t2 K1 G! `
1 2 3 4 5 6 7 8 9 10
- H8 b; {" l3 S! Q! s4 T% t2 B 11 12 13 14 15 16 17 18 19 20" D h$ a/ {) E
21 22 23 24 25 26 27 28 29 304 `$ Z, a5 N7 D6 U* ~6 q* B+ d9 F
31 32 33 34 35 36 37 38 39 400 J" N8 V: K( r& P" R% J
41 42 43 44 45 46 47 48 49 50
/ q: h5 N$ E# r9 b 51 52 53 54 55 56 57 58 59 608 a( w! p4 r1 h( V' f' R4 E
61 62 63 64 65 66 67 68 69 702 R; I" A0 c0 h. |
71 72 73 74 75 76 77 78 79 80
0 w; M( ?' Y# r6 b 81 82 83 84 85 86 87 88 89 90" q6 Y( h) o, }, L1 R2 @. v
91 92 93 94 95 96 97 98 99 100
. z8 S( }0 q6 F3 ^* b' A/ ]! M3 y8 Q5 q$ F! ?2 r( h% o
这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>
5 d: D+ I1 ?( i4 q, W! b. N< >6 u* f8 O( G' ~: _
但是循环控制无法使用for(;p<a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p>a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p<a+100时则一次都不循环。7 T+ ]) b$ A. t- Q
main()7 _) W9 G7 t, u2 _2 k
{ int a[10][10],*p=a,i,j,n,m;* s" H7 J) c* g& `, d
printf("%d\n",p-a);
$ ^3 [+ o) R! _& u: [& _, @ for(i=0;i<100;i++,*p=i,p++); printf("%d\n",p-a); printf("%d\n",i);8 \4 R: z. l- l+ n& J8 `
for(i=0,p=a; i<100 ;i++,p++)printf("%4d",*p); printf("\n%d\n",i);
" {, b% N1 S( l}</P>
& |& a9 |1 c0 j' C3 ?. o9 O7 ?# n
) \ {( V: A7 a( ], U' D0 ^[此贴子已经被作者于2005-4-23 21:59:02编辑过] |
zan
|