成都网站建设设计

将想法与焦点和您一起共享

C++基础8【难】回顾:数组指针,函数指针,函数指针做函数参数C语言多态

1,数组指针语法梳理

创新互联是一家专注于网站设计、做网站与策划设计,砀山网站建设哪家好?创新互联做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:砀山等地区。砀山做网站价格咨询:18982081108

回顾,如何定义数组数据类型:

回顾,如何定义指针类型数组:

回顾,如何直接定义 一个指向数组类型的指针:

2,函数指针语法梳理

1)如何定义一个函数类型

2)如何定义一个函数指针类型

3)如何定义一个函数指针(指向一个函数的入口地址)

【中级程序员 转 高级程序员的 必经之路】

1,函数类型做函数的参数

把函数的入口地址传过来,奇怪的效果:【多态就是这样】

函数指针 做 函数参数 思想剖析

1,数组指针语法梳理

回顾,如何定义数组数据类型:

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include 
using namespace std;

int main()
{
	typedef int (arr) [5];	//定义一种数据类型
	arr myarr;		//用数据类型,定义变量
	myarr[3] = 10;		//使用
	cout << myarr[3] << endl;
	int a[5];		//等同于这样写
		
	return 0;
}

chunli@http://990487026.blog.51cto.com~/c++$ g++ -g -o run main.cpp  && ./run 
10
chunli@http://990487026.blog.51cto.com~/c++$

回顾,如何定义指针类型数组:

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include 
using namespace std;

int main()
{
	typedef int (*arr) [10];	//定义一种数据类型
	arr my_arr;			//用数据类型申明一个变量
	int a[10];			//常规的数组
	my_arr = &a;			//区地址给我
	(*my_arr)[0] = 9999;
	cout << *((*my_arr) +0) << endl;

	return 0;
}

chunli@http://990487026.blog.51cto.com~/c++$ g++ -g -o run main.cpp  && ./run 
9999
chunli@http://990487026.blog.51cto.com~/c++$

回顾,如何直接定义 一个指向数组类型的指针:

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include 
using namespace std;

int main()
{
	int arr[10];
	int (*p)[10];
	p = &arr;
	(*p)[2] = 10;
	cout << *(*(p) + 2)<< endl;
	return 0;
}

chunli@http://990487026.blog.51cto.com~/c++$ g++ -g -o run main.cpp  && ./run 
10
chunli@http://990487026.blog.51cto.com~/c++$

2,函数指针语法梳理

1)如何定义一个函数类型

2)如何定义一个函数指针类型

3)如何定义一个函数指针(指向一个函数的入口地址)

1,函数的基本调用:

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include 
using namespace std;

int add(int a,int b)
{
	return a + b;
}

int main()
{
	int sum = add(1,2);	//函数名,就是函数的入口地址
	cout << sum <

1)如何定义一个函数类型

使用函数指针,间接调用函数

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include 
using namespace std;

int add(int a,int b)
{
	return a + b;
}

int main()
{
	typedef int (fun)(int a,int b);	//定义一种fun的函数类型
	fun *p = NULL;			//定义一个变量
	p =  &add;			//把返回值,参数类型完全一样的函数地址,给我
	p =  add;                       //这样写,兼容C历史
	int sum = p(1,6);
	cout << sum <

2)如何定义一个函数指针类型

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include 
using namespace std;

int add(int a,int b)
{
	return a + b;
}

int main()
{
	typedef int (*fun)(int a,int b);//定义一种fun的函数类型
	fun p = NULL;			//定义一个变量
	p =  add;			//这样写,兼容C历史
	int sum = p(1,6);
	cout << sum <

3)如何定义一个函数指针(指向一个函数的入口地址)

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include 
using namespace std;

int add(int a,int b)
{
	return a + b;
}

int main()
{
	int (*fun)(int a,int b);	//定义一个变量
	fun =  add;		
	int sum = fun(1,6);
	cout << sum <

【中级程序员 转 高级程序员的 必经之路】

1,函数类型做函数的参数

准备:

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include 
using namespace std;
typedef int (*fun)(int a,int b);	//定义一种数据类型

int add(int a,int b)
{
	return a + b;
}


int main()
{
	fun f = NULL;			//使用数据类型,定义一个变量
	f = &add;			//给变变量赋值
	cout << f(1,2) << endl;
	return 0;
}

chunli@http://990487026.blog.51cto.com~/c++$ g++ -g -o run main.cpp  && ./run 
3
chunli@http://990487026.blog.51cto.com~/c++$

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include 
using namespace std;
typedef int (*fun)(int a,int b);	//定义一种数据类型

int add(int a,int b)
{
	return a + b;
}

//下面的这两种方式的是一样的
int chunli_1(fun f)
{
	return f(3,5);
}
int chunli_2( int (*fun)(int a,int b))
{
	return fun(2,3);
}

int main()
{
	cout <<  chunli_1(add)<< endl;
	cout <<  chunli_2(add)<< endl;
	return 0;
}

chunli@http://990487026.blog.51cto.com~/c++$ !g
g++ -g -o run main.cpp  && ./run 
8
5
chunli@http://990487026.blog.51cto.com~/c++$

把函数的入口地址传过来,奇怪的效果:【多态就是这样】

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include 
using namespace std;
typedef int (*fun)(int a,int b);	//定义一种数据类型

int add1(int a,int b)
{
	cout << "add1 函数被调用 \n";
	return a + b;
}
int add2(int a,int b)
{
	cout << "add2 函数被调用 \n";
	return a + b;
}
int add3(int a,int b)
{
	cout << "add3 函数被调用\n";
	return a + b;
}
int add4(int a,int b)
{
	cout << "add4 函数被调用\n";
	return a + b;
}

//下面的这两种方式的是一样的
int chunli_1(fun f)
{
	return f(3,5);
}
int chunli_2( int (*fun)(int a,int b))
{
	return fun(2,3);
}

int main()
{
	cout <<  chunli_1(add1)<< endl;
	cout <<  chunli_2(add2)<< endl;
	cout <<  chunli_2(add3)<< endl;
	cout <<  chunli_2(add4)<< endl;
	return 0;
}

chunli@http://990487026.blog.51cto.com~/c++$ g++ -g -o run main.cpp  && ./run 
add1 函数被调用 
8
add2 函数被调用 
5
add3 函数被调用
5
add4 函数被调用
5
chunli@http://990487026.blog.51cto.com~/c++$

函数指针 做 函数参数 思想剖析

C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态


当前题目:C++基础8【难】回顾:数组指针,函数指针,函数指针做函数参数C语言多态
文章起源:http://chengdu.cdxwcx.cn/article/jijoos.html