指针

    技术2022-05-20  27

    指针

    1.   int (*a)[10] a是指向数组的指针  a++一次移动一个数组的大小

    (理解指针时从里向外读)

     

    2.[]优先级比*高,所以char * a[]是一个数组,元素是字符指针

     

    3.int a[] = {1,2,3};

    int *p = (int *)(&a+1); &a得到的是指向数组的指针,+1就指向了第4个元素

        x = *(p-1);  p只是整形指针,-1指向第3个元素

    注意指针相减  与指向类型有关  不同类型不能减

     

    4.  char *s1 = "1234" 指针赋值 "1234"不在栈区,可以做返回值

        char s2[] = "1234" 数组初始化

     

    5.函数指针

    函数指针 int (*p)(int,int);     赋值p = max;  p = &max都可以

     

        函数名就是指向函数的常指针

     

        int (*(*f)(int,int))(int)

        f是一个函数指针,指向的函数 返回值是一个函数指针

     

        []优先级比*高  所以int *p[10](); 是一个数组,元素是函数指针,无参数返回值是int

     

        函数指针可用于异步操作的回调

     

    函数指针例子

    void sort(int (*cmp)(void *,void *))   作形参

    sort(comp);                      作实参

    sort((int (*)(void * ,void *))comp);    强制类型转换

     

    6.new delete

    new和delete new[]和delete[]应配对使用  如果对数组使用delete,指针直接指向的空间被释放(也就是类的大小sizeof*n) 但只对第一个对象调用析构函数,因此其它对象内部开辟的内存没有释放   所以对内置数据类型两种都可以

    new可以在指定内存上构造一个对象

     

    7. 智能指针是一个类,将指针变量封装起来,智能指针对象离开作用域时就会调用析构函数释放内存

    最大好处是 避免因程序异常使delete语句没有执行。

     

    8.句柄是个32位整数,实际上是windows在内存中维护的对象内存物理地址列表的索引  因为物理内存是变化的,将所有对象的地址记录在一张表中


    最新回复(0)