1, 函数首地址被赋值给了函数名,故函数名是函数内存地址的首地址。
2, 一个指向函数的指针|必须确保该函数被定义 |
|且分配了内存 |否则他将指向一个空地址,这是指针的大忌。
3,long(*func)(int) : 声明了一个指针,该指针指向一个函数。
long*func1(int) :声明了一个函数,该函数返回一个指针。
4,定义:
float (*fp)(float&, float&);
fp=&rectangle;
fp=rectangle; 都行
#include <iostream>
#include <string>
using namespace std;
float (*fp)(float&, float&);
void (*p)(float&, float&);
//函数调用列表,将极大的减少代码量
float rectangle(float &x, float &y)
{
return x * y;
}
float triangle(float &x, float &y)
{
return x * y * 0.5;
}
void Swap(float &x, float &y)
{
float n = x;
x = y;
y = n;
}
void print(float &x, float &y)
{
cout << "长为:" << x << " 宽为:" << y << endl;
}
bool check(string str)
{
for(int i=0; i<str.length();i++)
{
if((str[i] > '9' || str[i] < '0')&&(str[i]!='.'))
{
return false;
}
}
return true;
}
void get(float &x, float &y)
{
cout << "请输入x的新值: " << endl;
std::string str1;
cin >> str1;
while(!check(str1))
{
cout << "输入的不是数字,请重新输入:x=" << endl;
cin >> str1;
}
cout << "请输入y的新值: " << endl;
std::string str2;
cin >> str2;
while(!check(str2))
{
cout << "输入的不是数字,请重新输入:y=" << endl;
cin >> str2;
}
x = atof(str1.c_str());
y = atof(str2.c_str());
}
int main()
{
bool quit=false;
float a = 2, b=3;
int choice;
while(quit==false)
{
cout << " 0: quit 1: input x,y 2 triangle 3 rectangle 4 swap x y" << endl;
cin>>choice;
switch(choice)
{
case 1:
cout << "设定之前长和宽的值";
/*print(a, b);
get(a, b);
cout << "设定之后长和宽的值";
print(a, b);*/
p=get;
break;
case 2:
//print(a, b);
cout << "三角形的面积为: ";/* << triangle(a,b) << endl;*/
fp=triangle;
break;
case 3:
//print(a, b);
cout << "长方形的面积为: ";/* << rectangle(a,b) << endl;*/
fp=rectangle;
break;
case 4:
cout << "交换之前长和宽的值";
/*print(a, b);
swap(a, b);
cout << "交换之后长和宽的值";
print(a, b);*/
p=Swap;
break;
default:
quit=true;
break;
}
if(choice==1 || choice==4)
{
print(a, b);
p(a, b);
print(a, b);
}
if(choice==2 || choice==3)
{
print(a, b);
cout << "面积为:" << fp(a, b) << endl;
}
}
}