指针和函数
1、 用指针传递数据,函数可以修改数据
采用swap函数,指针传递数据,实现数据交换,传递指针,则数据能被修改
2、 传递指向常量的指针
值不能被修改,只传递了数据的地址,避免复制大量的地址
举例:实现功能,将一个字符串保存在一个数组中,并将字符串的长度保存在数组的前两个字节中
输出结果:00 08 4d 51 54 54 43 4f 41 50 00 00 00 00 00 00 00 00 00 00 字符对应的十六进制值
第10行中,writeCString()函数,传递了const char *string ,传递字符串的地址,只传递了数据,而不修改数据的;传递了unsigned char* pptr,传递指针,用于修改地址中的值。
3、 传递指针的指针
如果想要修改原指针而不是修改指针的副本,就需要传递指针的指针
如果要在函数中修改变量的值,就要把变量的地址传给函数;如果变量是普通变量,就传普通变量的地址,如果变量是指针变量,就传指针变量的地址
writeCString()函数和writeInit()函数分别传递了unsigned char **pptr;是二级指针,是指向数组地址的指针。
4、 函数指针
通过定义函数指针方式,实现函数的调用;使用typedef定义函数指针类型,实现函数调用
第1行:定义函数指针直接,直接复制调用
第5行:typedef定义相同类型的函数指针,int (*)(int)类型,使用是看作一个数据类型即可,将这个数据类型取别名为funcptr
5、 传递函数的指针
传递函数指针,实现函数调用
第13行:compute()函数,传递了函数指针, 定义了一个fptrOperation 类型的函数指针,用于灵活调用add()和 substract() 两个函数, 同时传递给函数所需的参数。
6、 返回函数指针
把返回类型声明为函数指针类型
实现和上边同样的运算,采用返回函数指针,调用方式不同,实现功能相同
第14行:返回fptrOperation类型的函数指针
7、 使用函数指针数组
根据某写条件,选择要执行的函数,把函数值针声明为数组的类型即可
第12行:定义了函数指针数组,并复制为NULL;
第14行:函数初始化了函数指针数组
转换函数指针:需要谨慎使用,因为运行时系统不会验证函数指针参数的正确性
比较函数指针:可以用相等(==)和不等(!=)操作符来比较函数指针
作者: light, 来源:面包板社区
链接: https://mbb.eet-china.com/blog/uid-me-4056283.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
开发工匠 2023-10-23 08:57