程序栈 
程序栈是支持函数执行的内存区域,通常和堆共享一块区域。程序栈一般在这块区域的下部,堆在上部。 程序栈存放栈帧。调用函数时,该函数的栈帧被推到程序栈上,当函数终止时,栈帧从程序栈上弹出,其所占内存会被其他调用的栈帧内容覆盖。
栈帧
栈帧包含 返回地址 局部变量存储 函数参数存储 栈指针和基指针。
栈指针指向栈帧的顶部,基指针指向栈帧内部元素的地址。
深入理解指针之程序栈

指针函数
函数返回指针的两种常用技术:
1在函数内部使用malloc函数分配内存并返回存储其地址的指针,该指针可以是在函数内部声明的局部变量。 并由调用者负责释放该内存。
2返回传递给函数的指针参数。

从函数返回以下指针会存在问题:
1 返回未初始化的指针
2 返回指向无效地址指针
3返回指向局部变量的指针
4返回指针但是没有释放内存

将指针作为函数参数传递给函数,实质上也是传递的指针的值,也就是说函数会在栈帧中分配一个内存存放指针的副本。
将指针传递给函数后,使用指针前先判断是否为空指针是个编程的好习惯。

函数参数 传递指针的指针
传递指针的指针可以达到修改指针参数的目的

函数指针
函数指针是存有函数地址的指针
函数指针声明: int (*fptr)(int a);// 声明fptr是一个返回整数数据类型的函数指针,参数类型为整数。
使用时只需要把相应的函数名赋值给函数指针就可以了。
int  fun(int a);
int (*fptr)(int a);
fprt=fun;
fptr(5);
使用函数指针时一定要注意函数指针的参数类型和赋给该指针函数地址的函数的参数是否一致。

为函数指针声明一个类型定义:
typdef iint (*fptr)(int);// 和经常用到的类型定义不太一样

定义后便可以用fptr代替这一类的函数指针:
fptr fptr1;
fptr1(5);

传递函数指针
把函数指针声明作为参数传递给函数参数列表。


相关文章:

  • 2021-08-13
  • 2021-12-06
  • 2021-10-19
  • 2022-01-25
  • 2021-09-16
  • 2021-12-25
  • 2021-12-07
  • 2021-11-20
猜你喜欢
  • 2022-03-09
  • 2021-09-09
  • 2021-07-11
  • 2021-10-06
  • 2021-10-24
  • 2021-08-14
  • 2021-05-24
相关资源
相似解决方案