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. 阅读复杂语句的“左右规则”
从变量名开始,先向右,再向左。 遇到括号时,改变阅读方向; 分析完括号后,跳出括号,按照先右后左的顺序继续阅读,以此类推,直到分析完成。例如
int (*fun)(int a);
变量名fun,向右走遇到括号,分析括号里的信息,fun表示fun是一个指针; 往右边走,遇到一个括号,说明*fun是一个函数,所以fun是一个指向函数的指针,这个函数有一个输入变量int a,返回类型是int。
4. 使用方法
整数a; a是int类型的变量。
int UINT; 只需将变量更改为您想要命名的名称并添加在前面即可。 表示 int 类型的变量类型已更改为 UINT。
5.函数指针->本质上是一个变量(指针变量)
int 乐趣(int);
上面是一个函数原型,参数是两个int,返回一个int。 fun 是函数的首地址。
int (*p)(int); /*定义一个函数指针,采用3的分析方法,p是指针,函数指针,函数的输入变量为int,输出为int*/
p = fun;//指针变量p指向fun函数的首地址。
程序中,当运行到p(10)时,会跳转到fun的地址,执行fun方法,并返回int数据。
为了方便使用,使用定义函数指针数据类型:
int (*FUN)(int); // 将int (*p)(int)等函数指针缩写为(重命名)FUN
有趣的p; // 声明一个函数指针类型的变量 p
6.指针函数->本质上是一个函数,返回值是指针类型值
int *add(int, int); // 声明一个函数,返回值是int类型的指针