• C++基础学习-20120514


    1------指针与引用的区别:
    1:非空区别。一个引用必须指向某个对象,必须初始化。但是指针可以赋空值,但给指针赋值之前必须制定指针的地址。变量不许为空时必须把变量赋给引用;
    2:合法性区别。引用使用之前不需要测试合法性。指针应防止为空;
    3:指针可以重新赋值指向新的对象。而引用的对象不能改变,但其内容可以改变;
    4:使用指针的情况--不同时刻指向不同的对象;

    2--------void swap(int *p,int*q)
    { int* temp;//不分配内存
    *temp=*p;//拷贝时临时给了一个地址,函数结束后不收回,造成内存泄漏
    *p=*q;
    *q=*temp;
    }//

    void swap(int* p,int* q)
    { int* temp;
    temp=p;
    p=q;
    q=temp;//并没有实现树值的交换,交换的仅是地址值
    }
    void swap(int* p,int* q)
    { int temp;
    temp=*p;
    *p=*q;
    *q=temp;//交换的确实是地址指向的值
    }

    void swap(int &p,int&q)
    { int temp;
    temp=&p;
    &p=&q;
    &q=temp;//引用传递
    }
    3-----------------
    char **p;
    *p=(char*)malloc(sizeof(char)*num);// 地址值====地址值
    char *p;
    p=(char*)malloc(sizeof(char)*num);
     (void*) malloc(len);//分配内存的函数,返回值void*,可改写成其他类型的指针

    4-------------
    char* stra()
    {
    char a[]="adasfsf";
    return str;//局部数组,函数返回局部变量的值,调用完之后局部变量就会释放,返回的结果不稳定也不安全,随时有收回的可能
    }
     
    const char *strb()
    {
    char *a="asadsaf";//分配全局数组,保存在普通数据段;
    static char a[]="adsadasf";//数据保存在静态空间(全局数据区)也可
    return a;
    }

    5---------

    地址值的减法
    int a[3];
    int*p,*q;
    a[0]=1;a[1]=2;a[2]=2;
    p=a;q=&a[2];
    a[q-p]=????
    q-p=(q实际地址值-p实际地址值)/sizeof(int)

    6-------------
    float (**def)[10];def是一个2级指针,指向一个一维数组的《《指针》》,数组元素类型都是float型,优先级从右向左,有括号优先级最大
    double*(*gh)[10];gh是一个指针,指向一个一维数组,元素是double*
    double(*f[10])();f是一个数组,有10个元素,元素都是函数的指针,指向的函数的类型是返回值为double
    int* (*b)[10];是一个一位数组的指针
    long (*fun)(int);函数指针

    7--------
    int a[]={1,2,3,4,5};
    int *p=(int *)(&a+1);//数组名本身就是首地址,再加&就是双地址--双指针----二维数组,加1就是数组整体加一行;指向第六个元素(尽管不存在)
    cout<<*(a+1)<<*(p-1);


    8--------
    迷途指针=delete一个指针的时,让编译器释放内存,但指针本身依然存在;
    因此,在delete指针时,要把指针设为0,并且不要再使用他

    9--------
    malloc与free是库函数,对于非内部数据的类型对象而言,无法满足动态对象的要求,库函数不再编译器的控制范围之内,
    不能执行构造和析构函数的任务,需要使用new/delete
    在delete一个指针之后再去delete会造成程序-------崩溃

    10--------
    oo必须提供类,对象,继承
    空类默认产生---默认构造函数,析构函数,拷贝构造函数,赋值函数

  • 相关阅读:
    iOS开发 关于启动页和停留时间的设置
    iOS应用开发,全局强制竖屏,部分页面允许旋转的处理
    iOS利用Application Loader打包提交到App Store时遇到错误The filename 未命名.ipa in the package contains an invalid character(s). The valid characters are:A-Z ,a-z,0-9,dash,period,underscore,but the name cannot start w
    iOS之加载Gif图片
    Node以数据块的形式读取文件
    Nodejs日志管理包
    Java操作SFTP
    Nginx+Nodejs搭建图片服务器
    使用Atlas实现MySQL读写分离
    MySQL-(Master-Slave)配置
  • 原文地址:https://www.cnblogs.com/fickleness/p/3148972.html
Copyright © 2020-2023  润新知