数学建模社区-数学中国
标题:
[原创]有关指针与二维数组
[打印本页]
作者:
xxb1922
时间:
2005-4-23 20:06
标题:
[原创]有关指针与二维数组
<
>定义一个二维数组和一个同类型的指针
3 |( a2 y; v8 q' D
如: int a[10][10],*p=a;
" ]# h5 M/ A; Z* M- X
然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>
' q, [7 I' E- m4 c( c
<
>
6 F% v' B& c' s3 B' Z) f3 |6 X
我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以
+ e. r( b$ `" `9 \2 H8 P
pa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请
3 y' K# n' w4 H2 s
大家来各自己发表意见。
. |4 O q$ O% p5 @& F, B$ x
本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>
0 c7 q7 N5 V$ v
- u/ ]& X f) z) {9 @
<
>下面这个程序是正确的:</P>
) C3 |2 ?; w4 }8 x9 o
<
>main()
, N& D& S! d2 F( o
{ int a[10][10],*pa=a,i,j,m;
$ {. D& u3 ~$ h o. N. A7 S
for(i=0,m=0;i<10;i++)
) C' }! C2 d: z4 f8 g- p
for(j=0;j<10;j++,m++,pa++){ a
[j]=m; printf("%d ",*pa);}
! ]8 h9 a! p& h7 |: W0 _+ ^3 i# M" Q
} </P>
" o1 W8 Q8 c A! r6 K; Y J B% k
<
>
2 }/ W& j. Y4 O& w2 C
1 2 3 4 5 6 7 8 9 10
% P( b$ S3 M3 m
11 12 13 14 15 16 17 18 19 20
+ |- O" W2 l% m' n: d/ `& A. \
21 22 23 24 25 26 27 28 29 30
: z4 c! b w. B
31 32 33 34 35 36 37 38 39 40
/ {5 X" v) P+ f4 C k
41 42 43 44 45 46 47 48 49 50
6 a. a; o' P( O `0 a! G
51 52 53 54 55 56 57 58 59 60
# A* j5 B' R3 F8 @* G/ t
61 62 63 64 65 66 67 68 69 70
3 o4 T8 r. n! U: A) ]/ S
71 72 73 74 75 76 77 78 79 80
4 j2 u: c+ z/ x, o! N( _1 P
81 82 83 84 85 86 87 88 89 90
4 }% i4 i: V# a2 }& F( r7 M+ f, s
91 92 93 94 95 96 97 98 99 100
& o- o: m9 l" \2 Y
6 X2 a9 d! R& X- l7 C s
这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>
* S. S* O# H5 e' T" Z3 p0 W: A3 d. ~
<
>
# p; w( e. Y: _" m3 ~2 D
但是循环控制无法使用for(;p<a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p>a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p<a+100时则一次都不循环。
* k3 d% Z5 X, x1 h; y6 Q) M! B
main()
2 _4 J$ q: P: [' T
{ int a[10][10],*p=a,i,j,n,m;
5 l7 l1 X2 F7 t; a
printf("%d\n",p-a);
+ |/ x" Q5 f4 Z8 M5 F0 J7 z) l1 T3 r
for(i=0;i<100;i++,*p=i,p++); printf("%d\n",p-a); printf("%d\n",i);
$ u5 ]/ ~; U* _ R2 a
for(i=0,p=a; i<100 ;i++,p++)printf("%4d",*p); printf("\n%d\n",i);
! T2 R U; } Q# [, _8 ]; f/ T% T
}</P>
3 @4 S; e; `3 a# V/ d1 e
. c" R8 z7 {/ X4 X1 k! ~
[此贴子已经被作者于2005-4-23 21:59:02编辑过]
作者:
小菜菜同学
时间:
2005-4-29 17:51
<
>是不是*p才是指针所指的数,</P><
>而p只是内存地址。——不一定对,呵呵</P>
作者:
ilikenba
时间:
2005-4-29 19:53
<
>*p是指针所指的空间中所存储的值!p是内存地址!</P>
作者:
plgatc
时间:
2005-5-1 20:41
个人认为a+100是a[100]此地址值,是未定义的不确定的值
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5