c语言 指针的指针 用法详解,c语言指针csdn

  c语言 指针的指针 用法详解,c语言指针csdn

  最近过年在家,大年初一,闲来无事,就把以前看过的书整理了一下,顺手把《C指针的深度理解》这本书重新看了一遍。这本书整体感觉比较简单,但是还有一些地方是我平时没有想到或者注意到的。在这里,我会做一个记录,以便以后需要时可以查看。

  1.自实现内存安全释放功能safeFree

  为空地址或已经释放内存的地址释放内存,并报告错误。

  自实现内存安全释放功能:

  void安全免费(void **pp)

  {

  如果(pp!==NULL *pp!=空)

  {

  免费(* PP);

  * pp=NULL

  }

  }

  具体:

  添加宏定义时,调用函数时,不需要显示用于类型转换的宏定义前后两个函数的名称。宏定义只是文本替换的简单预编译。

  #包括iostream

  #包含malloc.h

  使用命名空间std

  #定义safe free(p)safe free _ 2((void * *)(p))

  void safeFree_2(void **p)

  {

  如果(p!=NULL *p!=空)

  {

  免费(* p);

  * p=NULL

  }

  }

  int main()

  {

  int *p,* * q;

  p=(int *)malloc(sizeof(int));

  safe free(p);

  safe free(p);

  p=(int *)malloc(sizeof(int));

  q=

  safe free(* q);

  safe free(* q);

  返回0;

  }

  2.指针数组和数组指针

  3.函数指针数组

  因为函数的地址可以作为函数指针传递,而函数本身不能作为参数传递,所以只有函数指针的数组是不存在的(数组函数指针)。

  第一种形式:

  typedef int(*operation)(int,int);

  操作operations[128]={ NULL };

  第二种形式:int (* operations [128]) (int,int)={ null };

  #包括iostream

  使用命名空间std

  typedef int (*fptr)(int,int);

  int (*operations[128])(int,int)={ NULL };

  int add(int x,int y)

  {

  返回x y;

  }

  int减法(int x,int y)

  {

  返回x-y;

  }

  void initializeOperationsArray()

  {

  操作[ ]=添加;

  操作[-]=sub;

  }

  int eval(char操作码,int num1,int num2)

  {

  fptr操作;

  operation=operations[opcode];

  返回操作(num1,num 2);

  }

  int main()

  {

  initializeOperationsArray();

  cout eval(,30,20)endl;

  cout eval(-,30,20)endl;

  返回0;

  }

  4.函数指针的互换

  typedef int(* fptrToSingleInt)(int);

  typedef int (*fptrToTwoInts)(int,int);

  int add(int,int);

  fptrToTwoInts fptrFirst=add

  fptrToSingleInt fptrSecond=(fptrSingleInt)fptrFirst;

  fptrFirst=(fptrToTwoInts)fptrSecond;

  函数指针类型转换可能会改变指针长度或产生错误,但通常会给出正确的结果。(C/c++多标准,由不同厂商和编译环境决定)

  同时,也不能保证函数指针和数据指针相互转换后都能正常工作,比如:

  void * pv=add一般来说,基本的函数指针类型可以用于函数指针交换。

  typedef void(* fptrBase)();

  fptrBase basePointer

  fptrFirst=add

  base pointer=(fptrToSingleInt)fptrFirst;

  fptrFirst=(fptrToTwoInts)base pointer;

  转载请联系作者授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: