黑马程序员技术交流社区

标题: 指向函数的指针的问题? [打印本页]

作者: 远人    时间: 2014-4-1 10:02
标题: 指向函数的指针的问题?
下面是指向函数的指针的问题:
  1. #include <stdio.h>

  2. int sum(int a,int b)
  3. {
  4.     return a + b;
  5. }

  6. int main(int argc, const char * argv[])
  7. {

  8.     int (*p)(int a,int b);
  9.    
  10.     p = sum;
  11.    
  12. //    int c = p(10 , 9);
  13.     int c = (*p)(4 ,56);
  14.    
  15.     printf("c is %d\n",c);
  16.    
  17.     return 0;
  18. }
复制代码


在代码中有两个问题:
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