⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pointer_fun.cpp

📁 其他人不需帐号就可自由下载此个C或Java源
💻 CPP
字号:
#include "stdafx.h"

// 定义: 一个函数在编译时被分配给一个入口地址,这个入口地址就称为函数的指针。可以用一个指针变量指向函数,然后通过该指针变量调用此函数。

// 每一个函数都占用一段内存单元,它们都有一个起始地址。因此可以使用一个指针变量指向一个函数,然后通过该指针变量调用此函数。

// 函数名代表了函数的入口地址。

// 指向函数的指针
void pointerFunction()
{
	int max0(int a, int b);

	int res = 0;
		// 函数的调用
	//int res = max0(5,7);	
	//printf("%d\n", res);
	/*
	// 通过函数指针调用
	int (*p)(int, int); //定义, 后面2个int 指明了参数的类型以及个数
	p = max0; // 初始化,将函数的入口地址赋值给 p
	res = (*p)(10,12); // 调用	
	printf("%d\n", res);
*/
	
	
	// 函数的指针作为函数参数 ***********************************************	
	// 函数声明	
	int pointerFunctionPram(int a, int b, int (*function)(int a, int b));// 声明
	 
	
	// 初始化求最大值函数
	int (*p_max0)(int, int);
	p_max0 = max0;
	// 初始化求最小值函数
	int min(int a, int b);
	int (*p_min)(int, int);
	p_min = min;
	
	// 初始化调用函数
	/*
	int (*p_pointerFunctionPram)(int a, int b, int (*function)(int a, int b));
	p_pointerFunctionPram = pointerFunctionPram;// 初始化
	res = (*p_pointerFunctionPram)(10, 20,max0); // 使用
	printf("max0 = %d\n", res);
	*/
	int a = 10; 
	int b = 100;
	int process(int a, int b, int (*funName)(int aa, int bb)); //声明
	// res = process(a, b,max0); 
	res = process(a, b,p_max0);

	printf("max0 = %d\n", res);
	res = process(a, b, min); // 函数指针作为函数参数
	printf("min = %d\n", res);
	
	//******** 测试 返回指针值的函数
	int *account(int a, int b); //声明
	int *p_account;
	p_account = account(1, 10);// 函数调用
	printf("%d\n", *p_account); // 取值
	
	
}

int max0(int a, int b)
{
	return (a > b)?a:b;
}


int min(int a, int b)
{
	return (a < b)?a:b;
}

// 函数指针作为函数参数
int pointerFunctionPram(int a, int b, int (*funName)(int a, int b))
{
	int res = (*funName)(a, b);
	return res; 
}

// 函数指针作为函数参数 功能同上 
int process(int a, int b, int (*funName)(int a, int b))
{
	int res = (*funName)(a, b); // int res = max0(a, b);
	return res; 
}



//*****************************************************************8
// 返回指针值的函数
// 定义形式:
// 类型名 *函数名(参数列表)
// int *account(int a, int b) ,求【a, b】区间的累加值
// 函数有返回值,这个返回值在内存中也有一个地址,现在将这个地址返回,就是返回
//               指针值的函数 。


int *account(int a, int b)
{
	int *p;
	int res = 0;
	for (int i = a; i <= b; i++)
	{
		res = res + i;
	}
	p = &res; // ok 
	// *p = res; // error,p没有被初始化
	return p; // 返回指针res的地址
}














⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -