- 在线时间
- 0 小时
- 最后登录
- 2005-6-22
- 注册时间
- 2005-4-23
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 65 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 22
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   17.89% 该用户从未签到
 |
< >定义一个二维数组和一个同类型的指针
4 y, B0 Q" r1 ?' S如: int a[10][10],*p=a;# K" P' e( P. E' b$ Q9 {8 l. T
然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>/ d/ t8 P* ?3 U5 e; ]( G3 I
< >; z/ `$ V6 g9 j! s6 s% M
我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以
, l9 b* d: c6 ?# M0 w. Q$ Hpa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请* ]1 N+ K8 y) x8 M9 I
大家来各自己发表意见。, }' h# Q$ Y( n! H3 }
本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>: h' B; b! ]+ s1 t
# C$ O, g% |6 I9 b. T) ]
< >下面这个程序是正确的:</P>6 p" u6 @! S& r# o
< >main()
' ]4 x b8 U" V k/ d4 M{ int a[10][10],*pa=a,i,j,m;; q; | w: u# B4 Q. J9 Y
for(i=0,m=0;i<10;i++)6 y& P+ s1 t/ b3 e8 d$ K) f
for(j=0;j<10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);}
6 @" g6 {9 E3 w7 T2 g } </P>
* u3 k& @, b) c& a) A/ o4 a< > ; H6 r" t& M; W. y* u2 L
1 2 3 4 5 6 7 8 9 109 Z' R, |$ d6 Y: i" i1 ]
11 12 13 14 15 16 17 18 19 20
, l& s, e7 u3 O7 y8 j; b9 ~& g( T 21 22 23 24 25 26 27 28 29 30
+ n, D4 H2 \; u2 d1 |" N$ M 31 32 33 34 35 36 37 38 39 40
# O4 ^( o1 e# I. o; J, k7 t" z 41 42 43 44 45 46 47 48 49 50
, L j) t0 r2 ^4 `. a- o2 N. U* ] 51 52 53 54 55 56 57 58 59 60
% D1 o+ p$ e8 d4 t- |4 \+ B1 W 61 62 63 64 65 66 67 68 69 70
4 n: J8 m, ^3 e0 K6 d3 {% c 71 72 73 74 75 76 77 78 79 80
+ Q, M U; V8 t! L- E* c 81 82 83 84 85 86 87 88 89 90# J! s2 G7 @7 i2 q$ ?4 \* F8 }$ z" R
91 92 93 94 95 96 97 98 99 100
2 r V, O, ]2 q, C* O% M
6 n. S1 ]1 y% a- F3 N' ?5 Y这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>
3 z& _% F3 c8 o2 @ t< >
+ E5 `& v6 a) |/ F4 W但是循环控制无法使用for(;p<a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p>a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p<a+100时则一次都不循环。
$ c! ~9 z& b6 x+ N+ Z Ymain()
8 Y, h) R2 c, U- s7 S9 h/ x{ int a[10][10],*p=a,i,j,n,m;2 r9 W" s/ {, d* w" D' Q
printf("%d\n",p-a);- h! Q+ {. B8 d, l
for(i=0;i<100;i++,*p=i,p++); printf("%d\n",p-a); printf("%d\n",i);/ t5 ^( ]( Z6 c: r
for(i=0,p=a; i<100 ;i++,p++)printf("%4d",*p); printf("\n%d\n",i);
5 h* E. D7 ^) D" h}</P>8 M# }' o4 } G. F* c
- ^9 ]8 I4 g# q M1 ?[此贴子已经被作者于2005-4-23 21:59:02编辑过] |
zan
|