A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 远人 中级黑马   /  2014-4-1 10:02  /  1069 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面是指向函数的指针的问题:
  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是一个完成指向目标完成赋值的过
    程。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

2 个回复

倒序浏览
沙洲冷 来自手机 中级黑马 2014-4-1 10:23:00
沙发
首先,函数名sum代表函数的地址,赋值语句p = sum;是把函数的地址赋值给指针变量p。所以p中存的就是函数的地址,所以可以取出p中的值来调用函数(*p) (4,56),又由于p中存的是sum的地址,所以p就代表函数的地址,故可以这样调用函数p (10,9);两种调用方法都对!

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
我觉得可以自己画个内存图,赋值语句p = sum p指向了sum,后边的事,就进到sum那个内存板块了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马