*运算和&运算

/*

     &:取地址运算符

     *:指针运算符(或称为间接运算符),取指针所指向的对象的内容

     */

    int a,b;

    int *pointer_1, *pointer_2;

    pointer_1 = &a;//把变量a的地址赋给pointer_1,切记不要将一个整数赋值给指针变量

    &*pointer_1;//&*的优先级相同,但按自右而左的方向结合,次句先执行(*pointer_1)* pointer_1就是变量a,再执行&运算,故&*pointer_1 &a等价,即取变量a的地址

    *&a;//先进行&运算得a的地址,再进行*运算,即&a所指向的变量即a,故*&a a 等价

    *pointer_1++;//++*的优先级相同,自右而左结合,故相当于*(pointer_1++),但由于++pointer_1的右侧,因此先执行*pointer_1a的值,在将pointer_1++,这样pointer_1就不再指向a

    (*pointer_1)++;//a++等价

    

    /*********************************************************************/

    /*数组与指针*/

    int num[10];

    int *p;

    p = &num[0];//num[0]元素的地址赋给指针变量pp指向数组的第0号元素

                //c语言规定数组名(不包括形参数组名,形参不占用内存)代表数组中首元素的地址,故以下两

    p = &num[0];

    p = num;

                //语句等价

    *p = 1;//在这里将1赋给p当前所指向的数组元素即num[0],值得注意的是赋值前p必须指向一个数组元素

            //C中规定指针变量p已经指向数组中的一个元素,则p+1指向同一数组中下一个元素,而不是将p的值简单+1;例如,数组元素是float型,没个元素占4个字节,则p+1意味着p的值(地址)加上4个字节,p+1所代表的地址实际上是p+1*dd是一个数组元素所占的字节数

            //如果p的初值为&num[0], p+inum+i都是num[i]的地址

    *(p+i);

    *(num+i);

            //p+inum+i所指向的数组元素即num[i]

    

    /*******************************************************************/

    /*总结*/

    p++;

    p+=1;//使p指向下一元素,即num[1]

    

    *p++;

    *(p++);//先得到p指向变量的值即*p,再使p+1=>p

    

    *(++p);//先使p+1=>p,再取*p

    

    ++(*p);//表示p指向的元素值+1

    

    //如果p指向num数组中第i个元素;则:

    *(p--);

    num[i--];//这两语句等价,先对p进行*运算,再使p自减

    

    *(++p);

    num[++i];//这两语句等价,先使p自加,再做*运算

    

    *(--p);

    a[--i];//这两语句等价,先使p自减,再做*运算

原文地址:https://www.cnblogs.com/chenhaosuibi/p/3439535.html