- 在线时间
- 0 小时
- 最后登录
- 2005-6-22
- 注册时间
- 2005-4-23
- 听众数
- 0
- 收听数
- 0
- 能力
- 0 分
- 体力
- 65 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 22
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 4
- 主题
- 1
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   17.89% 该用户从未签到
 |
< >定义一个二维数组和一个同类型的指针
# Q8 c1 O# ~" |: T) @+ C/ f如: int a[10][10],*p=a;
7 f% ?( e' a% w4 F3 Y然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>
3 ?4 ?# K# l% `7 a9 |5 R- \% [) _< >
6 |$ a0 s* M( S; d" Y$ r+ ]2 {+ e我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以& s# i7 y& \$ H5 K7 E- j% [8 D
pa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请
% u. V9 {6 [# [2 ~/ i; t' r8 {大家来各自己发表意见。( ?: g8 L2 ^, M2 x2 U
本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>
, ]- A* c( G. e7 ]3 x9 c8 r( r6 q' h- H/ Q: \ z& h
< >下面这个程序是正确的:</P>9 }% q( B) t0 ~' l
< >main() G5 r2 a: w. v, ]. u; n
{ int a[10][10],*pa=a,i,j,m;: `* L4 L6 D, m1 O
for(i=0,m=0;i<10;i++)# M7 G2 h% J/ \/ k
for(j=0;j<10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);}8 H8 M* ?( ]% B/ o8 d
} </P>
( e4 m1 s0 Q. X5 j' w( @* w, N" r< >
0 |/ \7 ?1 Z+ x& z* t8 C5 z; Z% g7 Y 1 2 3 4 5 6 7 8 9 10
. \7 ?( I' |' |% I3 N& h2 w1 n) ^ 11 12 13 14 15 16 17 18 19 202 u1 e+ n; r1 D
21 22 23 24 25 26 27 28 29 303 }- P2 v% W. O: j# p, \
31 32 33 34 35 36 37 38 39 408 T% ]" a, ?' u8 ]+ m, S: R# M
41 42 43 44 45 46 47 48 49 50
) C) `6 b/ \( [. @$ g 51 52 53 54 55 56 57 58 59 603 C9 r# e. I8 {1 t5 `& I' i0 A& o
61 62 63 64 65 66 67 68 69 70
: I( l& B0 Y% w) r, ^ 71 72 73 74 75 76 77 78 79 80: k( ]- U* z" f4 }- I
81 82 83 84 85 86 87 88 89 90
; B% x H, _2 T# J7 K. e; D _' ] 91 92 93 94 95 96 97 98 99 100- Q/ n" X5 f; K) d/ k6 c
* g. z4 T$ F$ ^% T
这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>
: r9 ], X: {. ^; @3 i7 L< >
9 H+ T7 K1 }) X- N7 ^7 M7 r4 H但是循环控制无法使用for(;p<a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p>a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p<a+100时则一次都不循环。
# L5 o H" Y6 a7 ]4 b2 d/ L0 Jmain()* d6 w2 l0 h4 l- y/ H0 A( o+ H0 |
{ int a[10][10],*p=a,i,j,n,m;
; ?) B* l% s; }* G4 R printf("%d\n",p-a);
# `' V* B0 o" J3 G for(i=0;i<100;i++,*p=i,p++); printf("%d\n",p-a); printf("%d\n",i);
2 w3 q3 C$ K4 j) { z' y- G for(i=0,p=a; i<100 ;i++,p++)printf("%4d",*p); printf("\n%d\n",i);
7 }. v# o8 u* r& P# n- ?; O}</P>
+ K8 r" s" C- R: X; I# C; t9 I3 ~7 D3 k1 U% A3 R! M" Y; f4 k" \( S
[此贴子已经被作者于2005-4-23 21:59:02编辑过] |
zan
|