C语言指向函数的指针,C语言的指向函数的指针的问题

1,C语言的指向函数的指针的问题函数指针就是一个函数的首地址,这个在汇编里面最好看明白了.比如:int * a (int i, int j) ; 假设a的值是:0x3312FF80,,下面是汇编调用的例子.push jpush icall 0x33FF80上面是调用方法,而int* a(int i, int j); 的返回值也很容易看出来,返回一个DWORD类型的一个指针而已.反汇编应该是 return n;这里的n是四个字节,应为返回是一个指针类型,在32位下指针就是4字节.我有仔细研究了下你的问题,你是弄不明白 int* a() 和int (*p)() 吗?还是别的什么意思?请继续追问.是否可以解决您的问题?
2,c语言相关指针函数和指向函数的指针指向函数的指针 就是指函数可以通过函数的指针间接地调用 指针函数 是指函数的返回类型是指针而已 当需要返回地址时常用 比如要返回数组等等指针函数就是那个 , 说一下函数指针(只想函数的指针)举个例子intmax(int a,int b);int mix(int a,int b);这两个函数int (*p)(int ,int)如果程序中p = max;那么 比如int a= 4, b = 5;max(a,b) 与p(a,b)是等价的如果p = min;那么min(a,b)与p(a,b)是等价的【C语言指向函数的指针,C语言的指向函数的指针的问题】
3,C语言指向函数的指针c语言中叫做回调函数,将函数指针(如max)作为函数的参数,函数(如fun)中调用这个参数指向的函数,调用函数(fun)时看情况而给函数传入不同的函数指针例如fun(a,b,min),那么fun函数调用执行三个参数就调用min函数参数的定义要与传入的函数指针相匹配例如fun(int,x,int y,(*p)(int,int)) 那么调用fun(a,b,min)时,min的参数必须是(int ,int)指针函数就是那个 , 说一下函数指针(只想函数的指针) 举个例子 int max(int a,int b); int mix(int a,int b); 这两个函数 int (*p)(int ,int) 如果程序中 p = max; 那么 比如int a = 4, b = 5; max(a,b) 与p(a,b)是等价的 如果p = min; 那么min(a,b)与p(a,b)是等价的
4,C语言中关于指向数组的指针因为数组的名字,本身就是指向数组头的指针 。另外char **ppi=*pi;是不对的吧 。这意思是给一个指针赋值一个常数,这样的赋值只允许右值为0的char str[100];char *pi=str;//相当于char *pi ;pi=str;char **ppi=*pi;//这个地方抄错了 。应为char **ppi=π定义加*表明这是指针类型的变量用的时候,就是用的指针,加*干什么 。只有取指针所指变量的值,或给指针所指的变量赋值的等涉及指针所指的变量的时候,才会又加*号 , 表示获取或改变,指针所指变量的值 。char x=10;*pi =x;//给指针所指的变量赋值 , 改变指针所指变量的值(改变*pi)。x=*pi;//取指针所指的值,取指针pi所指的变量的值(表示为*pi)赋值给x 。pippi是指针带*是取值的意思*pi=str意思是把str这个数组的首地址 放在pi所指的空间里 换句话说就是pi指向了str数组 。用pi+1之类的就可以指向数组里面的东西*(pi+1)等同于str[1]因为不管是str还是pi, ppi都指的是地址,函数调用时只需要知道参数的地址就行,然后再去取里边的值,而不用加上星号来传递里边的值 。首先要明白,指针数组中存储的是指针,也就是说两个元素都是指针,而且存放的也的确是“a”和“a”的地址,但要知道字符串和字符是两个不同的数据类型,也就是说虽然存放的地址是一样的 , 但指针的类型不能理解为是指向字符“a”和“a”的指针,应该是指向字符串“abcd”和“abcd”的,明白的么?

    推荐阅读