C语言中的指针和数组

来源:互联网 发布:卡盟顶部源码 编辑:程序博客网 时间:2024/05/17 02:10

    指针和数组关系密切。不带下标的数组名实际上就是指向数组第一个元素的指针。char p[0],以下两句完全等价:p, &p[0]。换言之,也就是:p == &p[0]为真,因为数组第一元素的地址也就是数组的地址。观察下面程序,p1和p2实际指向同一个内存地址。

#include <stdio.h>int main(int argc, char *argv[]){int a[]={1,3,5,7,9};int *p1=a;int *p2=&a[0];printf("*p1: %u\n",p1);printf("*p2: %u\n",p2);return 0;}


    在指向某数组元素的指针上加或减去一个整数,就可以指向另一个数组元素,但不能越界,即超出该数组的范围。在指针上进行的加减运算,必须指向同一个数组,或数组存储空间的下一个单元。比如p=a+10是非法的,因为a只有5个元素。而p=a+5,虽然a的元素是a[0]-a[4],但p可以指向数组存储空间的下一个单元。

    引用数组元素,既可以用下标的方式,即a[i],也可以用指针的方式,即*(a+i)或*p。

    没有下标的数组名称为指针,反之,任何指针变量也可以取下标,就像变量声明成数组一样。例如:

int *p, i[10];p=i;i[5]=100;        //用数组名加下标赋值p[5]=100;        //用指针加下标赋值*(p+5)=100;        //用指针运算赋值

    上述3个赋值语句等价,都将100这个值赋到数组第6个元素中。其中第二种是对p进行下标操作,第3句是使用指针运算。

    C语言提供访问数组有两种方法:指针运算和数组下标。程序中经常通过指针运算存取数组,原因在于指针运算一般快于数组下标。因为程序设计中常常考虑速度因素,C程序员一般都用指针访问数组元素。


//以不同的方式输出数组的所有元素的值#include <stdio.h>int main(int argc, char *argv[]){int a[10],i,*p=NULL;for(i=0;i<10;i++)a[i]=i;//第一种:引用数组下标for(i=0;i<10;i++)printf("%d ",a[i]);printf("\n");//第二种:借助数组首元素构造的指针for(i=0;i<10;i++)printf("%d ",*(a+i);printf("\n");//第三种:指针for(p=a;p<a+10;)printf("%d ",*p++);printf("\n");return 0;}

    *p++等价于*(p++)。也即先得到p所指向的变量值(*p),再使p=p+1。也就是说,先取得当前p所指向的变量值,再使p指向下一个变量。



原创粉丝点击