- 在线时间
- 0 小时
- 最后登录
- 2005-6-22
- 注册时间
- 2005-4-23
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 65 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 22
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   17.89% 该用户从未签到
 |
< >定义一个二维数组和一个同类型的指针 H! k) g) Y7 q6 Y0 H/ J2 k
如: int a[10][10],*p=a;; ^' g( _: A) l) P$ r w
然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>( U& ?5 L3 I* u/ v6 G+ c5 f
< >8 z- B( ]9 V5 n K
我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以: \+ H( d" l% I2 q- t6 b
pa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请
) L" B; e# `" v5 \; P大家来各自己发表意见。
) m G) s6 _ I4 H8 b2 A, |) N& a本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>
2 A, A6 @" A5 h# l4 b
( V- B, o) N- l1 Q& _9 o9 p: e* I< >下面这个程序是正确的:</P>
' P# Y4 {( I8 Y/ h; A% I< >main()
9 t3 m1 \. @2 v; z1 l# l{ int a[10][10],*pa=a,i,j,m;
% W Y8 J3 l4 W' m for(i=0,m=0;i<10;i++)9 e- K( `2 ~ J0 `$ T/ A4 g
for(j=0;j<10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);}" W) [) Q1 N; k- Y! h
} </P>: \* J! v, z' Z- `, O
< > % L/ H0 ~# H7 t; P. l/ o" i" Z
1 2 3 4 5 6 7 8 9 10
/ Z3 d2 Q% d5 e, W+ }6 | 11 12 13 14 15 16 17 18 19 20% ^# D5 S! F: L0 r
21 22 23 24 25 26 27 28 29 30
; N5 V. |, a" ?7 V \6 D2 s! V+ @, v0 A' \ 31 32 33 34 35 36 37 38 39 40+ R' R2 [9 [' [( V
41 42 43 44 45 46 47 48 49 503 k: o+ T" O/ S( @1 m! a% F" {
51 52 53 54 55 56 57 58 59 60
) w2 N- R4 _( e( C. b2 L8 j5 L* ~ 61 62 63 64 65 66 67 68 69 70
( h" \6 ~4 E6 U! y+ J1 ?( T 71 72 73 74 75 76 77 78 79 80
$ t6 Z, L. S& T" @# N7 |+ H! O4 h 81 82 83 84 85 86 87 88 89 90( z7 w$ t+ N, w5 j/ f# J
91 92 93 94 95 96 97 98 99 100
- f) P! F7 q) f A8 U# m, ^3 p+ X4 m& X
这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>. c/ X" Z* C; Z" ?
< >5 Q( Z% ~6 O/ u
但是循环控制无法使用for(;p<a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p>a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p<a+100时则一次都不循环。
4 ^. y1 C( u6 p. v8 Imain()
[& K- `- C# i5 h{ int a[10][10],*p=a,i,j,n,m;
( q5 r. h1 l0 b printf("%d\n",p-a);( d6 x0 e* Q; W$ l
for(i=0;i<100;i++,*p=i,p++); printf("%d\n",p-a); printf("%d\n",i);& b) l8 d. f, \; p
for(i=0,p=a; i<100 ;i++,p++)printf("%4d",*p); printf("\n%d\n",i);
: c6 H% h# T2 d, a6 M}</P>
" }3 P* u/ S, o
8 w" A; e3 h7 d7 U[此贴子已经被作者于2005-4-23 21:59:02编辑过] |
zan
|