• *运算和&运算


    /*

         &:取地址运算符

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

         */

        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自减,再做*运算

  • 相关阅读:
    能量最小化初探,graphcuts能量最小化调用
    【设计】B 端产品设计
    【产品分析】关于字节跳动的神话与现实
    【UI】数据表格设计
    【设计】交互文档结构
    【作品集】UX作品集
    【产品方法论】需求是怎么来的
    【ML】人脸识别
    【ML】DL的参数量计算
    【网站部署】flask
  • 原文地址:https://www.cnblogs.com/chenhaosuibi/p/3439535.html
Copyright © 2020-2023  润新知