Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1334621
  • 博文数量: 284
  • 博客积分: 3251
  • 博客等级: 中校
  • 技术积分: 3046
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-26 17:23
文章分类

全部博文(284)

文章存档

2019年(2)

2018年(5)

2015年(19)

2014年(13)

2013年(10)

2012年(235)

分类: C/C++

2012-10-13 11:24:40

  1.数组元素

    看下面代码

  1. int i,a[]={3,4,5,6,7,3,7,4,4,6};
  2. for (i=0;i<=9;i++)
  3. {
  4.     printf (%d”,a[i] );
  5. }
      很显然,它是显示a 数组的各元素值。

    我们还可以这样访问元素,如下

  1. int i,a[]={3,4,5,6,7,3,7,4,4,6};
  2. for (i=0;i<=9;i++)
  3. {
  4.     printf (%d”,*(a+i));
  5. }
    它的结果和作用完全一样

    2. 通过指针访问数组元素

  1. int i,*pa,a[]={3,4,5,6,7,3,7,4,4,6};
  2. pa =a ;//请注意数组名a直接赋值给指针pa
  3. for (i=0;i<=9;i++)
  4. {
  5.     printf (%d”,pa[i]);
  6. }
       很显然,它也是显示a 数组的各元素值。

    另外与数组名一样也可如下:

  1. int i,*pa,a[]={3,4,5,6,7,3,7,4,4,6};
  2. pa =a;
  3. for (i=0;i<=9;i++)
  4. {
  5.     printf (%d”,*(pa+i));
  6. }
       pa=a即数组名赋值给指针,以及通过数组名、指针对元素的访问形式看,它们并没有什么区别,从这里可以看出数组名其实也就是指针。难道它们没有任何区别?有,请继续。

    3. 数组名与指针变量的区别

    请看下面的代码:

  1. int i,*pa,a[]={3,4,5,6,7,3,7,4,4,6};
  2. pa =a;
  3. for (i=0;i<=9;i++)
  4. {
  5.     printf (%d”,*pa);
  6.      pa++ ; //注意这里,指针值被修改
  7. }
    可以看出,这段代码也是将数组各元素值输出。不过,你把{}中的pa改成a试试。你会发现程序编译出错,不能成功。看来指针和数组名还是不同的。其实上面的指针是指针变量,而数组名只是一个指针常量。这个代码与上面的代码不同的是,指针pa在整个循环中,其值是不断递增的,即指针值被修改了。数组名是指针常量,其值是不能修改的,因此不能类似这样操作:a++.前面45节中pa[i]*pa+i)处,指针pa的值是使终没有改变。所以变量指针pa与数组名a可以互换。

        另外,给指针动态申请的地址空间可能是不连续的,而数组的地址空间是连续的,所以pa++和*(a+i)也是有区别的。

阅读(1871) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~