c语言typedef、函数、函数指针和指针函数

 2024-03-11 05:02:59  阅读 0

1. 函数地址

每个函数在运行时都会有一个入口地址。 程序运行时,如果调用某个函数,该函数会直接跳转到该函数的地址。 void test(){ ("adsd");} 程序中,a = test;b=&test; a和b的值相同,test是函数入口首地址,&test[函数名不是对象(函数是对象),&test本来就是非法的,但是编译器允许它]。 test的类型是void(),&test代表一个指向函数test的对象的地址,类型是void(*)(),所以两者的值是相同的,但是类型不同。 可以类似于int b[10]; a和&(b[0]),a指向10个int类型的数组,&b[0]指向元素b[0],值相同但类型不同。

2. 指向通用变量的指针

整数*p; 定义了一个整型数据的地址,存放整型数据。

3. 阅读复杂语句的“左右规则”

从变量名开始,先向右,再向左。 遇到括号时,改变阅读方向; 分析完括号后,跳出括号,按照先右后左的顺序继续阅读,以此类推,直到分析完成。例如

c语言钩子函数_c钩子函数_钩子函数使用场景

int (*fun)(int a);

变量名fun,向右走遇到括号,分析括号里的信息,fun表示fun是一个指针; 往右边走,遇到一个括号,说明*fun是一个函数,所以fun是一个指向函数的指针,这个函数有一个输入变量int a,返回类型是int。

4. 使用方法

整数a; a是int类型的变量。

int UINT; 只需将变量更改为您想要命名的名称并添加在前面即可。 表示 int 类型的变量类型已更改为 UINT。

c钩子函数_c语言钩子函数_钩子函数使用场景

5.函数指针->本质上是一个变量(指针变量

int 乐趣(int);

上面是一个函数原型,参数是两个int,返回一个int。 fun 是函数的首地址。

int (*p)(int); /*定义一个函数指针,采用3的分析方法,p是指针,函数指针,函数的输入变量为int,输出为int*/

p = fun;//指针变量p指向fun函数的首地址。

c钩子函数_钩子函数使用场景_c语言钩子函数

程序中,当运行到p(10)时,会跳转到fun的地址,执行fun方法,并返回int数据。

为了方便使用,使用定义函数指针数据类型:

int (*FUN)(int); // 将int (*p)(int)等函数指针缩写为(重命名)FUN

有趣的p; // 声明一个函数指针类型的变量 p

6.指针函数->本质上是一个函数,返回值是指针类型值

int *add(int, int); // 声明一个函数,返回值是int类型的指针

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码