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)   指针函数

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

  • 相关阅读:
    ASP.NET 2.0的页面缓存功能介绍
    我对针对接口编程的浅解
    接口和抽象类的区别
    面向接口编程到底有什么好处
    泛型编程是什么
    方法的重写、重载及隐藏
    基于事件的编程有什么好处
    Socket Remoting WebService对比
    技术讲座:.NET委托、事件及应用兼谈软件项目开发
    ny589 糖果
  • 原文地址:https://www.cnblogs.com/bossren/p/6422224.html
Copyright © 2011-2022 走看看