关于函数名和函数指针的理解
2011-10-01 17:25
218 查看
最近看了一点C基础的内容,对于函数名有点不理解:
print_score('b', &get_score);
get_score这个函数地址,作为参数被传入到print_score, 而在print_score函数中用int(*visit)(char)接收传入的参数。
visit在这里是表示一个函数指针变量,可以看出这个指针指向的应该是一个参数为char,返回值为int的函数,那么在main函数中把get_score这个函数地址作为参数传入是正确的,因为它符合参数列表为char, 返回值为int的要求,同时表明函数名get_score是这个函数的入口地址变量。
但是更多的时候,作这样的调用:
print_score('b', get_score)
这种调用方式也是正确的,那么以上两种方式该如何统一呢?也就是函数名到底是什么呢?
请教了别人,得出的结论是:函数名指的是代表函数实体的标识符,类型是函数类型,不是函数指针类型,而在表达式中放入标识符需要数值化,C和C++都规定函数到指针的转换,除少数情况外,表达式中的函数指示符会隐式转换成指向函数首地址的函数指针, 而&符仍然遵循它的取地址操作的语法
这样上面两种表达方式就统一了,get_score在这里应该是个回调函数。
/* my_func.h */ #ifndef MY_FUNC_H #define MY_FUNC_H void print_score(char, int(*visit)(char)); #endif /* my_func.c */ #include <stdio.h> #include "my_func.h" void print_score(char score, int(*visit)(char)) { printf("the score is %d\n",(*visit)(score)); } 在主函数中,根据传入的score打印出相应的分数值。 #include "my_func.h" int get_score(char ch) { int score = 0; switch(ch) { case 'a': score = 100; break; case 'b': score = 80; break; case 'c': score = 60; break; case 'd': score = 0; break; default: score = -1; } return score; } int main(void) { print_score('b', &get_score); return 0; }
print_score('b', &get_score);
get_score这个函数地址,作为参数被传入到print_score, 而在print_score函数中用int(*visit)(char)接收传入的参数。
visit在这里是表示一个函数指针变量,可以看出这个指针指向的应该是一个参数为char,返回值为int的函数,那么在main函数中把get_score这个函数地址作为参数传入是正确的,因为它符合参数列表为char, 返回值为int的要求,同时表明函数名get_score是这个函数的入口地址变量。
但是更多的时候,作这样的调用:
print_score('b', get_score)
这种调用方式也是正确的,那么以上两种方式该如何统一呢?也就是函数名到底是什么呢?
请教了别人,得出的结论是:函数名指的是代表函数实体的标识符,类型是函数类型,不是函数指针类型,而在表达式中放入标识符需要数值化,C和C++都规定函数到指针的转换,除少数情况外,表达式中的函数指示符会隐式转换成指向函数首地址的函数指针, 而&符仍然遵循它的取地址操作的语法
这样上面两种表达方式就统一了,get_score在这里应该是个回调函数。
相关文章推荐
- 个人理解:关于指针数组、数组指针、函数指针、函数指针数组、函数指针数组指针
- 指针初学笔记(两个数交换的函数----关于指针的理解)
- 关于理解指针与函数
- 关于函数指针的理解
- 关于指针数组、数组指针、及函数指针和指向函数指针数组的指针的一点理解
- 关于函数指针的理解(指向的函数返回值又是另外一个函数指针)
- 什么是指针?关于指针的数组,数组指针,函数指针,函数指针数组,指向函数指针数组的指针的理解
- 关于指针函数以及函数指针的一些理解
- 关于函数指针的一些理解与其他相关内容的联想
- 关于指针作为函数参数传递的理解,对比普通变量作为函数参数的需注意点,其实就是行参和实参的问题。
- 关于递归调用,函数指针,数组,字符串的一些理解
- 关于函数指针的理解
- 自己关于指针在函数中使用的理解和总结
- 关于函数指针
- 关于函数和字符指针的一些看法。
- 从函数指针角度理解MFC消息映射
- Q13.3 关于虚表指针、虚函数表、虚函数表中虚函数地址
- 关于C++指向函数的指针 的理解
- 关于DC和SelectObject()函数的理解
- 写写本人关于c/c++的引用,指针,虚函数的理解