指针的运算总结

一、算术运算:

    1、指针与证书的加减运算:(px+n,px-n)

     指针作为地址量加上或减去一个整数n,其意义是指针当前指向位置的前方或后方第n个数据的位置。由于指针可以指向不同数据类型,即数据长度不同的数据,所以这种运算的结果取决于指针指向的数据类型。

    例如:当字符指针加1,实际结果是指针中的地址值加1;整数指针加1,实际结果是指针中的地址值加2;

    * p+n的实际操作是:(p)+n*sizeof(数据类型);

    * p-n的实际操作是:(p)-n*sizeof(数据类型);

 

    2、指针加1、减1运算:(px++,++px,px--,--px)

    具有1中的计算特点,例如:  y=*px++;

    该表达式中有三种运算:=、*和++。 *和++优先于=。  *和++属于同级运算,其结合规则是从右至左。所以++运算是对px进行的。相当于 y=*(px++);

    这里的px++是后置运算。因此该表达式的运算顺序是:访问px当前值指向的目标,把目标变量的值赋予y,然后px加1指向下一个目标。

 

    3、指针的相减运算:(px-py)

    如果两个指针px和py所指向的变量类型相同,则可以对他们进行相减运算。结果是两指针指向的地址位置之间的数据个数。实际上就是地址计算。所以两指针相减的结果值不是地址量,而是一个整数。

 

二、关系运算:

    数据在内存中的存储逻辑是由前向后,那么指向后方的指针大于指向前方的指针。

 

三、赋值运算:

    1、把一个变量的地址赋予一个指向相同数据类型的指针,例如:char a,*p; p=&a;

    2、把一个指针的值赋予相同数据类型的另外一个指针,例如: int *p,*q; p=q;

    3、把数组的地址赋予指向相同数据类型的指针。例如: char a[10], *pa; pa=a;

 

另:指针赋值区别,如果一开始只是定义,后面赋值,则是如下形式:

char a, *p; p=&a;

  如果在一开始定义的时候就赋值,则是如下形式:

int a, *p=&a;

于是也可以理解了这种形式:

int n;  int *p1=&n; int *p2=p1; 因为p1只是在定义赋值的时候才是*p1=&n,如果在不是定义的时候用到p1,则p1就是代表&n,不用写成*p1;

于是上面的形式等价于:int n;  int *p1=&n; int *p2=&n;

posted on 2012-03-06 23:16  duancanmeng  阅读(478)  评论(0编辑  收藏  举报

导航