zoukankan      html  css  js  c++  java
  • 【C语言篇】☞ 14. 高级指针、判断类型

    高级指针

      高级指针:包括双指针(二级指针)、void指针、函数指针。

     1. 双指针

      双指针(二级指针),是指针的指针。

       

    2. void指针  

      void指针:万能指针,代表任意类型的指针。

      malloc分配堆内存时,由于无法确定内存存储类型,所以可以使用void*代表任意指针类型。

      

    3. 函数指针

    • 函数指针是指向函数的指针变量,每个函数都有一个入口地址,指针变量中保存函数的入口地址
    • 每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样。
    • 函数指针有两个用途:调用函数和做函数的参数。

      函数指针的声明方法为:

    返回值类型 (*指针变量名) ([形参列表]);

     

      函数指针(指向函数的指针)的定义格式:

      

      函数也会占用一块存储空间,因为函数也会占用一块存储空间所以函数也有自己的地址

      函数的地址保存在函数名中,函数名就是函数的地址 == 数组名就是数组的地址

      数组名就是指向数组第一个元素的常量指针,函数名也是指向函数第一条指令的常量指针

     

    函数指针的语法格式:

      

      

    函数指针的优缺点:

    • 优点:是对于通用函数中要涉用到另一个函数,但函数名称未定,是让用户编的,此时需要使用函数指针。

    如,通用定积分计算,被计算函数是待定的,是由调用者确定的函数

    如,通用排序函数也是,比较函数与交换函数也是让用户自己编的

    • 缺点:是由于函数指针指向的函数未定,容易导致程序崩溃。

      

     

    判断类型

      怎么判断类型:从右往左边看,没有括号就看最右边是什么类型就是什么类型;有括号,括号里是什么类型就是什么类型。

     

    • int *a[10]  指针数组 
      • []的优先级比*高,a代表一个数组,其数组元素存储的类型是int *;
      • a的值代表数组首元素a[0]的地址值,是一个指针,即*a=a[0],只是需要注意的是这个指针类型为const,即不能改变的。
    • int (*a)[10] 数组指针
      • a代表一个数组指针,它指向一个int [5]型的数组;因为a的类型,所以a++后,它会偏移sizeof(int)*5 个字节。
    • (int)有参数就是函数

      •  

        int (*a)(int)  函数指针

      •  

        int *a (int)   指针函数

      函数和方法的区别:函数是大家的,没有类。方法是类的,不是所有人都能用。

  • 相关阅读:
    【Educational Codeforces Round 101 (Rated for Div. 2) C】Building a Fence
    【Codeforces Round #698 (Div. 2) C】Nezzar and Symmetric Array
    【Codeforces Round #696 (Div. 2) D】Cleaning
    【Codeforces Round #696 (Div. 2) C】Array Destruction
    【Educational Codeforces Round 102 D】Program
    【Educational Codeforces Round 102 C】No More Inversions
    【Good Bye 2020 G】Song of the Sirens
    【Good Bye 2020 F】Euclid's nightmare
    使用mobx入门
    requestAnimationFrame 控制速度模拟setinterval
  • 原文地址:https://www.cnblogs.com/bossren/p/6422224.html
Copyright © 2011-2022 走看看