引用3

函数指针引用

函数指针引用做为参数,改变函数指针。

函数指针引用作为返回值,实现调用getit(p)("hello world");

getp(p)("mspaint");函数调用如何理解:调用函数返回值(返回值是一个函数指针)的函数。

getp  调用的函数名   p 函数参数    (“mspaint”)因为getp的返回值是一个函数指针,因此 它是调用返回的函数的参数。

说明引用的本质是指针的两种情况

int *getp()

{

int a =5;

return &a;//worning 返回局部变量的地址

}

int &getint()

{

int a=5;
return a;//worning 返回局部变量的地址

}

struct Mystruct {double &a;}; sizeof(Mystruct )==4;

引用函数指针数组

int (*p[4])(int ,int){add,su,mul,divv};

int (**ppp)(int,int ){new (int (*[4](int,int)){add,sub,mul,divv})};写的太乱,请看代码。


#include <iostream>
#include <cstdlib>


using namespace std;
//引用与函数指针
int gocmd(const char *cmd)
{
	system(cmd);
	return 1;
}
int showcmd(const char *cmd)
{
	cout<<cmd;
	return 1;
}
//引用作为函数指针参数。
void change(int(* &p)(const char *cmd))
{
	p = showcmd;
}
int(*  &getp( int (*&p)(const char *cmd) ))(const char *)
{
	p = showcmd;
	return p;
}
void main()
{

	int(*p)(const char *)(gocmd);
	p("calc");
	//change(p);
	//p("calc");
	getp(p)("mspaint");


	cin.get();
}
int add(int a, int b)
{
	return a + b;
}
int sub(int a, int b)
{
	return a - b;
}
int divv(int a, int b)
{
	return a / b;
}
int mul(int a, int b)
{
	return a * b;
}

void main()
{

	//int(*p)(const char *)(gocmd);
	//p("calc");
	change(p);
	p("calc");
	//getp(p)("mspaint");
	int(*p[4])(int a, int b){add,sub,divv,mul};
	int(**pp)(int a, int b) { new (int(*[4])(int, int)){add,sub,divv,mul} };
	for (int i = 0; i < 4; i++)
	{
		cout << p[i](10, 20) << endl;;
	}
	for (int i = 0; i < 4; i++)
	{
		cout << pp[i](10, 20) << endl;;
	}
	int(*(&rp)[4])(int a, int b)(p);
	int(**&rpp)(int a, int b)(pp);
	for (auto i : rp)
	{
		cout << i(20,10) << endl;
	}
	for (auto i : rp)
	{
		cout << i(20, 10) << endl;
	}
	using F= int(**)(int, int);//cpp风格别名
	for (F  ppx = pp; ppx < pp + 4; ppx++)
	{
		cout << (*ppx)(20, 10) << endl;
	}
	cin.get();
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值