黑马程序员技术交流社区
标题:
指向函数的指针的问题?
[打印本页]
作者:
远人
时间:
2014-4-1 10:02
标题:
指向函数的指针的问题?
下面是指向函数的指针的问题:
#include <stdio.h>
int sum(int a,int b)
{
return a + b;
}
int main(int argc, const char * argv[])
{
int (*p)(int a,int b);
p = sum;
// int c = p(10 , 9);
int c = (*p)(4 ,56);
printf("c is %d\n",c);
return 0;
}
复制代码
在代码中有两个问题:
1、p = sum? 按照指针的观点,p代表的是地址,那么这里讲sum赋值给p,那么这里的函数名sum代表的也是地址?
2、指向指针的函数间接调用函数的方法,
int c = p(10 , 9);
int c = (*p)(4 ,56);
这两种方法都可以,这是为什么?感觉这有悖于指针p存储的时地址,*p是一个完成指向目标完成赋值的过
程。
作者:
沙洲冷
时间:
2014-4-1 10:23
首先,函数名sum代表函数的地址,赋值语句p = sum;是把函数的地址赋值给指针变量p。所以p中存的就是函数的地址,所以可以取出p中的值来调用函数(*p) (4,56),又由于p中存的是sum的地址,所以p就代表函数的地址,故可以这样调用函数p (10,9);两种调用方法都对!
作者:
agelessman
时间:
2014-4-1 11:29
我觉得可以自己画个内存图,赋值语句p = sum p指向了sum,后边的事,就进到sum那个内存板块了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2