函数名与函数指针解惑
来源:互联网 发布:金额均分算法 编辑:程序博客网 时间:2024/06/13 01:28
先看一个程序:
#include <iostream>
using namespace std;
typedef int (* minPtr)(int,int);
int min(int x,int y)
{
printf("min=%d\n",(x<y?x:y));
return (x<y?x:y);
}
void printArrayAddress(int *a){
cout<<"Array 地址:"<<a<<endl;
}
void main()
{
int intA=0;
cout<<"栈中地址:&intA:"<<&intA<<endl;
minPtr p1=0;//函数指针只能通过同类型函数或函数指针或0值常量进行初始化,函数指针初始化为0时表示该指针不指向任何函数。
p1=min;
p1(2,4); //implicity dereferenced
p1=&min;
(*p1)(2,4); //explicity dereferenced
p1=*min;
(p1)(2,4);
//(&p1)(2,4);//term does not evaluate to a function
cout<<"代码区地址:min:"<<min<<endl;
cout<<"代码区地址:*min:"<<*min<<endl;
cout<<"代码区地址:&min:"<<&min<<endl;
min(2,4);
int a[]={1,2,3};
cout<<"栈中地址:a"<<a<<endl;
cout<<"栈中地址:&a"<<&a<<endl;
printArrayAddress(a);
cout<<"*a:"<<*a<<endl;
//printArray(&a); //cannot convert parameter 1 from 'int (*)[3]' to 'int *'
}
执行结果为:
栈中地址:&intA:0012FF7Cmin=2min=2min=2代码区地址:min:004011D6代码区地址:*min:004011D6代码区地址:&min:004011D6min=2栈中地址:a0012FF6C栈中地址:&a0012FF6CArray 地址:0012FF6C*a:1
疑问:
1.
cout<<"代码区地址:min:"<<min<<endl;
cout<<"代码区地址:*min:"<<*min<<endl;
cout<<"代码区地址:&min:"<<&min<<endl;
输出结果一样。
2.
cout<<"栈中地址:a"<<a<<endl;
cout<<"栈中地址:&a"<<&a<<endl;
输出结果一样。
解答:
这是语法特殊规定:
1.函数名=函数首址,&X也表示函数首址。
2.如果是函数名,那么自动转为函数指针(在引用函数名但没有调用该函数时,函数名自动解释为指向函数的指针)。
3.如果取地址,对函数取地址,也是函数指针。
4.C++ 函数指针是语法规定很复杂平时多多积累它的用法。
- 函数名与函数指针解惑
- 函数指针与函数名
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- 函数名与函数指针
- C#最小二乘法直线拟合算法
- java学习笔记(二十七)抽象类与设计模式
- C语言点滴
- c#有关获取系统路径
- 一些杂类网站
- 函数名与函数指针解惑
- java学习笔记(三十四)认识Runtime类
- C语言复杂声明
- VUSB(原AVRUSB)笔记1------电路图分析
- java 基TCP的多线程 网络编程
- 感冒也来凑热闹!感冒而有感!
- 两款PHP环境搭建工具
- Maven多模块项目 eclipse热部署 Maven项目实现 tomcat热部署 .
- catalina.sh加set JAVA_OPTS='-Xms64 -Xmx512'无效解决方案