- 在线时间
- 0 小时
- 最后登录
- 2005-6-22
- 注册时间
- 2005-4-23
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 65 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 22
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   17.89% 该用户从未签到
 |
< >定义一个二维数组和一个同类型的指针; G+ D( x5 r H, k
如: int a[10][10],*p=a; Z4 `+ O6 d) q9 t# a& E
然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>: z7 ^! `+ F H
< >
2 E( T# C/ v& d9 T我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以
( n* e5 H! K# d; B9 R9 B6 J/ s$ b# F' upa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请
' e+ J: [+ Z- ^- D- a' B9 ^" ~* V大家来各自己发表意见。6 T( B, K! V, a3 @! D o
本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>
0 h3 k2 N' {( K, N0 u0 G6 \. j: o5 Z) t* Z. j) z6 u
< >下面这个程序是正确的:</P>+ @- r- s1 T1 h# o/ _( W; \) U3 ]
< >main()
( I% O, C% I4 v7 q# T/ Z, s5 }4 ~{ int a[10][10],*pa=a,i,j,m;
; M0 q- ~& d& ~$ r7 Z for(i=0,m=0;i<10;i++)! Q' i- [* C" ]1 _9 E5 K* y. w
for(j=0;j<10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);}
6 n) g/ V9 w! x; A9 z } </P>
* J2 M# V0 _. V+ ~7 f/ i& }< >
( A" n ]* V8 E x7 X) V 1 2 3 4 5 6 7 8 9 10" o5 @5 o) K: @) [* Q
11 12 13 14 15 16 17 18 19 20/ A* i2 q' F& `& a+ z2 _* ~
21 22 23 24 25 26 27 28 29 30
& B* @. \- Q) Y3 p 31 32 33 34 35 36 37 38 39 40, J5 { X' {% U" _
41 42 43 44 45 46 47 48 49 50
: V+ {* o' c# J$ I5 u" D7 [ 51 52 53 54 55 56 57 58 59 60# |% Q/ k$ w5 Q+ _( K+ Q
61 62 63 64 65 66 67 68 69 70) D: P4 k- f" A: c4 S+ M
71 72 73 74 75 76 77 78 79 80
8 y0 i4 A% _; b3 g6 {7 t2 g9 | 81 82 83 84 85 86 87 88 89 90
/ e, p5 j% }( k: Q 91 92 93 94 95 96 97 98 99 100# i2 {8 S9 x4 p% e% D: X- t; f# y
, O9 F& {, g; w5 R% |$ j这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>( ^. [. W% v/ g
< >% t) ^- [( f5 Z( Q2 U
但是循环控制无法使用for(;p<a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p>a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p<a+100时则一次都不循环。
2 L/ L& R" w) a! |2 Z% K. \: [# Emain()
) i! l. k7 ^! [{ int a[10][10],*p=a,i,j,n,m;
% M1 H: O3 I9 ^# Q# I6 W ?0 S printf("%d\n",p-a);
/ \9 U) D' X) @6 q1 P) p- A for(i=0;i<100;i++,*p=i,p++); printf("%d\n",p-a); printf("%d\n",i);+ O5 V# g; w8 |4 G; `3 y
for(i=0,p=a; i<100 ;i++,p++)printf("%4d",*p); printf("\n%d\n",i);: m8 ? O* [7 f5 Y5 r8 Q/ j
}</P>
4 B% t- @' X9 {# `) ^
0 W) _' e2 j5 O# e t[此贴子已经被作者于2005-4-23 21:59:02编辑过] |
zan
|