QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2749|回复: 3
打印 上一主题 下一主题

[原创]有关指针与二维数组

[复制链接]
字体大小: 正常 放大
xxb1922        

1

主题

0

听众

22

积分

升级  17.89%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-4-23 20:06 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<>定义一个二维数组和一个同类型的指针+ V8 R( h+ t" w5 }9 B- E
如: int  a[10][10],*p=a;  j' y$ R2 h2 B% r
然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b[100]那样的吗?</P>
; V7 {* V$ O" N) E<>$ l' d6 k& s7 V
我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以
& X1 `7 p7 T6 n/ m+ Spa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请( M' L: ?% }! t( _5 R. q
大家来各自己发表意见。4 j  ]6 q& h% z$ u: ~# B1 T1 g
本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>( }$ ~1 R* U& V& W6 z% ?: }! m3 e/ r

8 v* @$ T" W# e<>下面这个程序是正确的:</P>
; g3 h' q- L7 E+ Q$ ^7 q<>main(); A0 ]$ b" l1 G  {# ~/ g5 x; W. u
{ int a[10][10],*pa=a,i,j,m;
2 i, i0 z4 K2 X" d7 q1 S6 W  for(i=0,m=0;i&lt;10;i++)7 s! h* I7 L+ T# A
    for(j=0;j&lt;10;j++,m++,pa++){ a[j]=m; printf("%d ",*pa);}
* u6 c# [/ _" W' }- P" x    } </P>, u/ v+ B; h4 e
<>  $ o$ I$ K3 d8 f. q
   1   2   3   4   5   6   7   8   9  10
; S6 y4 ?- t* Z+ V& g  T1 M2 `9 d" ~  11  12  13  14  15  16  17  18  19  20; l$ q3 l5 a- ]3 P
  21  22  23  24  25  26  27  28  29  30( h& e/ D5 @8 K
  31  32  33  34  35  36  37  38  39  40! i# p( E& ?: q. s( G9 K
  41  42  43  44  45  46  47  48  49  50( x+ A  H5 m9 u: f4 n
  51  52  53  54  55  56  57  58  59  60
1 h) S1 h9 l+ n. ^5 h  61  62  63  64  65  66  67  68  69  70
+ m3 M* S& _5 t( _) o  71  72  73  74  75  76  77  78  79  80+ M) |" R. E$ Z/ n' I( {! U9 k
  81  82  83  84  85  86  87  88  89  90
+ }2 _/ \/ N, G; ^+ n  91  92  93  94  95  96  97  98  99 1008 z& m3 w% g9 s

5 L8 O4 [5 A; x0 Z6 r4 E这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>. S6 A7 c5 v! J& m4 X
<>" S9 Y/ y- `1 W/ ?) H
但是循环控制无法使用for(;p&lt;a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p&gt;a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p&lt;a+100时则一次都不循环。# T% J' t' d( i+ G5 H! p
main()1 g6 N( O6 V# G8 m! O) }) v
{ int a[10][10],*p=a,i,j,n,m;' v  m2 F. [% ~$ \
  printf("%d\n",p-a);$ \8 X5 d% u* ^6 f3 b
  for(i=0;i&lt;100;i++,*p=i,p++); printf("%d\n",p-a);   printf("%d\n",i);4 O6 [# u! d* I% a0 z1 C. x  P
  for(i=0,p=a;   i&lt;100   ;i++,p++)printf("%4d",*p);     printf("\n%d\n",i);
- ^% F/ h9 H7 V1 i6 _# H}</P>3 e  m2 b+ ~1 Z0 A
" C4 `- d; G6 ~: I( I! ~+ \' l& K
[此贴子已经被作者于2005-4-23 21:59:02编辑过]
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
如果没有路,可以停下歇息;
如果没有忧伤,可以试着微笑;
可是幸福呢?
没有了幸福,我靠什么来生活?

22

主题

2

听众

72

积分

升级  70.53%

该用户从未签到

新人进步奖

回复

使用道具 举报

ilikenba 实名认证       

1万

主题

49

听众

2万

积分

  • TA的每日心情
    奋斗
    2024-6-23 05:14
  • 签到天数: 1043 天

    [LV.10]以坛为家III

    社区QQ达人 新人进步奖 优秀斑竹奖 发帖功臣

    群组万里江山

    群组sas讨论小组

    群组长盛证券理财有限公司

    群组C 语言讨论组

    群组Matlab讨论组

    回复

    使用道具 举报

    plgatc        

    4

    主题

    2

    听众

    19

    积分

    升级  14.74%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-11 15:15 , Processed in 0.451941 second(s), 72 queries .

    回顶部