xxb1922 发表于 2005-4-23 20:06

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

<P>定义一个二维数组和一个同类型的指针
如: int  a,*p=a;
然后用p++来逐个引用数组a中的100个元素吗,就像引用一维数组b那样的吗?</P>
<P>
我认为可以的,因为数组元素在内存中是连续存放的,不论是一维数组还是多维的,所以
pa++应该是可以逐个引用的,但是我在编程的过程中却出了错,不知道是不是可以这样,请
大家来各自己发表意见。
本来我是可以用其它方法来引用数组元素的,但是发现这样要方便的多。</P>

<P>下面这个程序是正确的:</P>
<P>main()
{ int a,*pa=a,i,j,m;
  for(i=0,m=0;i&lt;10;i++)
    for(j=0;j&lt;10;j++,m++,pa++){ a=m; printf("%d ",*pa);}
    } </P>
<P>  
   1   2   3   4   5   6   7   8   9  10
  11  12  13  14  15  16  17  18  19  20
  21  22  23  24  25  26  27  28  29  30
  31  32  33  34  35  36  37  38  39  40
  41  42  43  44  45  46  47  48  49  50
  51  52  53  54  55  56  57  58  59  60
  61  62  63  64  65  66  67  68  69  70
  71  72  73  74  75  76  77  78  79  80
  81  82  83  84  85  86  87  88  89  90
  91  92  93  94  95  96  97  98  99 100

这个程序的结果表示,可以用一个指针用pa++的形式逐个引用二维数组中的元素。</P>
<P>
但是循环控制无法使用for(;p&lt;a+100;p++)来控制,否则总是出错,书上有这样的例子,原因实在想不明白,语法上也不存在错误,倒是我把它改为p&gt;a+100后可以运行,但循环了120次,前100是正确的,但后20次则是不需要的,无意义的。而用p&lt;a+100时则一次都不循环。
main()
{ int a,*p=a,i,j,n,m;
  printf("%d\n",p-a);
  for(i=0;i&lt;100;i++,*p=i,p++); printf("%d\n",p-a);   printf("%d\n",i);
  for(i=0,p=a;   i&lt;100   ;i++,p++)printf("%4d",*p);     printf("\n%d\n",i);
}</P>

[此贴子已经被作者于2005-4-23 21:59:02编辑过]

小菜菜同学 发表于 2005-4-29 17:51

<P>是不是*p才是指针所指的数,</P><P>而p只是内存地址。——不一定对,呵呵</P>

ilikenba 发表于 2005-4-29 19:53

<P>*p是指针所指的空间中所存储的值!p是内存地址!</P>

plgatc 发表于 2005-5-1 20:41

个人认为a+100是a此地址值,是未定义的不确定的值
页: [1]
查看完整版本: [原创]有关指针与二维数组