- 在线时间
- 0 小时
- 最后登录
- 2005-6-22
- 注册时间
- 2005-4-23
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 65 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 22
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   17.89% 该用户从未签到
 |
< >定义一个二维数组和一个同类型的指针' O1 F/ H. P w6 ^
如: int a[10][10],*p=a;8 Y4 i! q! n6 h$ d8 h$ s9 s4 ~1 l
然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>
$ p2 g/ L5 e3 @7 e9 A/ o, L c& H2 J3 K< >
+ r' b9 @ ~, j我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以
. ]$ p. V' t' O7 c2 x) k8 _pa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请6 G9 W9 j# Y; ?; R/ @2 I0 N' r$ ]5 w
大家来各自己发表意见。5 X0 r; r0 f5 b5 N! m5 E4 m, X6 N
本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>) O4 J) ]6 F( h+ L, N: k3 A! c
* C# \" z( m0 ~5 ~' B< >下面这个程序是正确的:</P>
; T2 r& B7 |/ [' ~! i S$ [; o< >main()
0 Y) z& ?; E. c7 ^+ c7 j# ]) D, m; C{ int a[10][10],*pa=a,i,j,m;) S: I6 U6 m: T+ H' N# d# |
for(i=0,m=0;i<10;i++)
6 V2 }+ W! N ]* Y# D! S for(j=0;j<10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);}
# }6 x9 C ~+ D' b4 s } </P>" @8 z8 z9 B& R4 q
< >
0 e r; n/ ^& i q" \5 M 1 2 3 4 5 6 7 8 9 10
: A* |" d ]: ~2 ^7 d# u' U- P 11 12 13 14 15 16 17 18 19 202 D1 i: \3 }8 @0 p- H
21 22 23 24 25 26 27 28 29 304 ?) G4 j. N% ^( U3 k1 S; ]6 S& ?
31 32 33 34 35 36 37 38 39 40
# a, @5 C! V. b: f; c 41 42 43 44 45 46 47 48 49 50$ H' ^& j. t& m8 V8 ~
51 52 53 54 55 56 57 58 59 608 h+ x8 e- i7 \0 o
61 62 63 64 65 66 67 68 69 706 Y& d2 L7 l; v. Q- u, S. y
71 72 73 74 75 76 77 78 79 80
2 I* M w8 a. y( Z+ v& e 81 82 83 84 85 86 87 88 89 90
# ^6 l" [3 @* z6 Z I+ G( ` 91 92 93 94 95 96 97 98 99 1005 G& ^( s# S3 I0 s4 a& F1 x
4 u- o6 H8 U- c3 d4 R
这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>/ c3 ~0 E7 @2 N) c( U
< >
" {7 t8 m9 E1 W) B* C( v但是循环控制无法使用for(;p<a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p>a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p<a+100时则一次都不循环。
% Z! \4 r \! t' O+ h6 _7 Tmain()
0 G9 N4 b/ V9 s" @& n1 F{ int a[10][10],*p=a,i,j,n,m;
& B6 _. f6 _# m printf("%d\n",p-a);
0 e9 @+ g" P: F# l) C/ P for(i=0;i<100;i++,*p=i,p++); printf("%d\n",p-a); printf("%d\n",i);
$ a$ Z, D" D3 n# Q H$ s' | for(i=0,p=a; i<100 ;i++,p++)printf("%4d",*p); printf("\n%d\n",i);$ J- ]) X( ` p; N$ L% Q
}</P>
3 D6 H" p3 F9 n. r L: E
% L3 `) X7 I7 S0 }: o" B1 U[此贴子已经被作者于2005-4-23 21:59:02编辑过] |
zan
|