首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

函数名与函数指针,该怎么处理

2012-06-03 
函数名与函数指针/************************测试程序**********************/#includestdio.hint f(int)

函数名与函数指针
/************************测试程序**********************/
#include<stdio.h>

int f(int);

int main()
{
 
  int (*fp1)(int);
  int (*fp2)(int);
  int (*fp3)();
  int (*fp4)();

  int ret1;
  int ret2;
  int ret3;
  int ret4;
  
  /*给函数指针赋值*/
  fp1=f;
  fp2=&f;
  fp3=main;
  fp4=&main;


  /*使用函数指针调用函数*/
  ret1=(*fp1)(1);  
  ret2=(fp1)(1);
  printf("ret1=%d\n",ret1);
  printf("ret2=%d\n",ret2);

  ret3=(*fp2)(1);
  ret4=(fp2)(1);
  printf("ret3=%d\n",ret3);
  printf("ret4=%d\n",ret4);

  /*测试主函数和指向主函数的函数指针*/
  printf("main: %#p\n",main);
  printf("*main: %#p\n",*main);
  printf("fp3: %#p\n",fp3);
  printf("*fp3: %#p\n",*fp3);
  printf("fp4: %#p\n",fp4);
  printf("*fp4: %#p\n",*fp4);

  return 0;  
}

int f(int n)
{
 return 1;
}

/******************输出结果(visual c++ 6.0)****************************/
ret1=1
ret2=1
ret3=1
ret4=1
main: 0X0040100A
*main: 0X0040100A
fp3: 0X0040100A
*fp3: 0X0040100A
fp4: 0X0040100A
*fp4: 0X0040100A

/******************问题有如下几个****************************/

第一: fp1=f 和 fp2=&f在逻辑作用是一样吗?
第二: ret1=(*fp1)(1)和ret2=(fp1)(1)的结果一样,但c标准采用的是前者(*fp1)(1),使用后者行不行(fp1)(1)?
第三: printf("main: %#p\n",main)和printf("*main: %#p\n",*main)的结果一样,如果把函数名视为一块内存区域的
  逻辑首址,那为什对地址解引用(*main) 后怎么还是自身的地址?
   
希望得到大家热情的帮助,再次不胜感激!

[解决办法]
第一:一样
第二:你不是都试过了么……建议还是使用标准调用方式
第三:对函数解引用得到函数,函数本身就是地址。
[解决办法]
调用方式有多样的,
http://wenku.baidu.com/view/9eea9b350b4c2e3f572763fd.html
[解决办法]
这个,你要看看标准了,去把C标准里面关于函数指针的地方看看,就明白了

热点排行