溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C++基礎(chǔ)8【難】 回顧:數(shù)組指針,函數(shù)指針,函數(shù)指針做函數(shù)參數(shù) C語言多態(tài)

發(fā)布時間:2020-07-31 19:55:43 來源:網(wǎng)絡(luò) 閱讀:679 作者:990487026 欄目:移動開發(fā)

1,數(shù)組指針語法梳理

回顧,如何定義數(shù)組數(shù)據(jù)類型:

回顧,如何定義指針類型數(shù)組:

回顧,如何直接定義 一個指向數(shù)組類型的指針:

2,函數(shù)指針語法梳理

1)如何定義一個函數(shù)類型

2)如何定義一個函數(shù)指針類型

3)如何定義一個函數(shù)指針(指向一個函數(shù)的入口地址)




【中級程序員 轉(zhuǎn) 高級程序員的 必經(jīng)之路】

1,函數(shù)類型做函數(shù)的參數(shù)

把函數(shù)的入口地址傳過來,奇怪的效果:【多態(tài)就是這樣】

函數(shù)指針 做 函數(shù)參數(shù) 思想剖析



1,數(shù)組指針語法梳理

回顧,如何定義數(shù)組數(shù)據(jù)類型:

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

int main()
{
	typedef int (arr) [5];	//定義一種數(shù)據(jù)類型
	arr myarr;		//用數(shù)據(jù)類型,定義變量
	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++$


回顧,如何定義指針類型數(shù)組:

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

int main()
{
	typedef int (*arr) [10];	//定義一種數(shù)據(jù)類型
	arr my_arr;			//用數(shù)據(jù)類型申明一個變量
	int a[10];			//常規(guī)的數(shù)組
	my_arr = &a;			//區(qū)地址給我
	(*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++$



回顧,如何直接定義 一個指向數(shù)組類型的指針:

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include <iostream>
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,函數(shù)指針語法梳理

1)如何定義一個函數(shù)類型

2)如何定義一個函數(shù)指針類型

3)如何定義一個函數(shù)指針(指向一個函數(shù)的入口地址)


1,函數(shù)的基本調(diào)用:

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

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

int main()
{
	int sum = add(1,2);	//函數(shù)名,就是函數(shù)的入口地址
	cout << sum <<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++$


1)如何定義一個函數(shù)類型

使用函數(shù)指針,間接調(diào)用函數(shù)

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

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

int main()
{
	typedef int (fun)(int a,int b);	//定義一種fun的函數(shù)類型
	fun *p = NULL;			//定義一個變量
	p =  &add;			//把返回值,參數(shù)類型完全一樣的函數(shù)地址,給我
	p =  add;                       //這樣寫,兼容C歷史
	int sum = p(1,6);
	cout << sum <<endl;
	return 0;
}

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


2)如何定義一個函數(shù)指針類型

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

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

int main()
{
	typedef int (*fun)(int a,int b);//定義一種fun的函數(shù)類型
	fun p = NULL;			//定義一個變量
	p =  add;			//這樣寫,兼容C歷史
	int sum = p(1,6);
	cout << sum <<endl;
	return 0;
}

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





3)如何定義一個函數(shù)指針(指向一個函數(shù)的入口地址)

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include <iostream>
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 <<endl;
	return 0;
}

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


【中級程序員 轉(zhuǎn) 高級程序員的 必經(jīng)之路】


1,函數(shù)類型做函數(shù)的參數(shù)

準(zhǔn)備:

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include <iostream>
using namespace std;
typedef int (*fun)(int a,int b);	//定義一種數(shù)據(jù)類型

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


int main()
{
	fun f = NULL;			//使用數(shù)據(jù)類型,定義一個變量
	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 <iostream>
using namespace std;
typedef int (*fun)(int a,int b);	//定義一種數(shù)據(jù)類型

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++$




把函數(shù)的入口地址傳過來,奇怪的效果:【多態(tài)就是這樣】

chunli@http://990487026.blog.51cto.com~/c++$ cat main.cpp 
#include <iostream>
using namespace std;
typedef int (*fun)(int a,int b);	//定義一種數(shù)據(jù)類型

int add1(int a,int b)
{
	cout << "add1 函數(shù)被調(diào)用 \n";
	return a + b;
}
int add2(int a,int b)
{
	cout << "add2 函數(shù)被調(diào)用 \n";
	return a + b;
}
int add3(int a,int b)
{
	cout << "add3 函數(shù)被調(diào)用\n";
	return a + b;
}
int add4(int a,int b)
{
	cout << "add4 函數(shù)被調(diào)用\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 函數(shù)被調(diào)用 
8
add2 函數(shù)被調(diào)用 
5
add3 函數(shù)被調(diào)用
5
add4 函數(shù)被調(diào)用
5
chunli@http://990487026.blog.51cto.com~/c++$



函數(shù)指針 做 函數(shù)參數(shù) 思想剖析

C++基礎(chǔ)8【難】 回顧:數(shù)組指針,函數(shù)指針,函數(shù)指針做函數(shù)參數(shù) C語言多態(tài)














向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI