- 在线时间
- 0 小时
- 最后登录
- 2005-6-22
- 注册时间
- 2005-4-23
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 65 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 22
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   17.89% 该用户从未签到
 |
< >定义一个二维数组和一个同类型的指针
) n' T8 D9 I6 c: W3 {, j% k& c. ~* T如: int a[10][10],*p=a;7 a8 C7 Q, `1 f3 J- G% r/ E
然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>5 l5 T' L8 ~" K3 `& c
< >7 R7 D* H* @+ @. I2 G
我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以
; l M! H3 q2 T7 qpa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请
/ i; i' e" R( V大家来各自己发表意见。5 r% d& Z/ Z& i8 Q8 I, l: W
本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>
& p X2 ^" F8 e7 C" [* t; S
$ P' p+ ~( n6 @- g" C; H6 u8 x0 R< >下面这个程序是正确的:</P>
! j+ \' |* o7 J# }9 K) R) G ~< >main()
/ g6 A( U1 F* P! n J% [/ [{ int a[10][10],*pa=a,i,j,m;- N; e6 z$ N9 _. C" e. W2 C9 X8 @, f
for(i=0,m=0;i<10;i++)
' ~ K( o5 Y o9 N* v9 M0 p# ^ for(j=0;j<10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);}
5 ~1 ]! c8 ]( e1 q } </P>
0 S- z2 P: r* ~8 h# h# s& c6 r< >
/ y& H: q) \4 x& B3 t 1 2 3 4 5 6 7 8 9 10
/ K) Y( Y7 D2 r! J: i- h/ _0 i 11 12 13 14 15 16 17 18 19 20. d5 U% H! h1 T, a8 Y: Q
21 22 23 24 25 26 27 28 29 30
, X& i. _- `6 E5 y* D8 ?) o8 x 31 32 33 34 35 36 37 38 39 404 _1 }$ _0 D w8 i+ v+ ^& C" D( z8 w
41 42 43 44 45 46 47 48 49 50! q0 O( ~- T# `/ W
51 52 53 54 55 56 57 58 59 603 \ O- @* s9 h. Q, ~
61 62 63 64 65 66 67 68 69 70+ M- p% b- f/ W9 y
71 72 73 74 75 76 77 78 79 80
; X- A b( S* `1 c( D! f! v( [ 81 82 83 84 85 86 87 88 89 90
9 ~+ g: t7 q! k! `! w 91 92 93 94 95 96 97 98 99 100
5 L7 g1 @9 @4 B" U4 V* O
1 N* H" n7 g. g7 g+ C2 o$ p+ l; o这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P> Q: R* s! _& Y2 A- X
< >
7 p, k- V- p" X! z! T: P但是循环控制无法使用for(;p<a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p>a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p<a+100时则一次都不循环。
6 w6 h2 v# T! D6 smain()4 G1 e1 n9 ?+ [+ H5 l
{ int a[10][10],*p=a,i,j,n,m;2 B$ E3 J1 H4 n
printf("%d\n",p-a); s8 H& Z0 f5 G' r- q l4 o
for(i=0;i<100;i++,*p=i,p++); printf("%d\n",p-a); printf("%d\n",i);
- g) ]) j( w; Q* ?, G' o for(i=0,p=a; i<100 ;i++,p++)printf("%4d",*p); printf("\n%d\n",i);
3 _7 B4 s; a( e# s5 W/ w}</P>7 I; z- G( Q, w" H+ n, h+ m, G4 J
2 y5 x' O( z! T: G/ V; y6 f- {
[此贴子已经被作者于2005-4-23 21:59:02编辑过] |
zan
|