从零开始的c语言日记day39——指针进阶-函数指针

  • 复习上节内容

什么是指针数组什么是数组指针

从零开始的c语言日记day39——指针进阶-函数指针_第1张图片

取地址函数名和函数名都是打印函数地址

从零开始的c语言日记day39——指针进阶-函数指针_第2张图片

Pf指向的参数和函数的参数类型要一至。三种写法都可以实现调用

从零开始的c语言日记day39——指针进阶-函数指针_第3张图片

练习:如何解释图中代码作用

从零开始的c语言日记day39——指针进阶-函数指针_第4张图片

首先看(void(*)())如果我在(*)里放一个东西(*p)那么会变成(void(*p)())这样就可以看出这是一个函数指针,那么(viod(*)())是不是就是一种函数指针类型类似于int*等。0在括号里在类型的后面相当于一次强制类型转换,0是int类型把0转换成函数指针类型那我就认为0是指针地址。

以上代码是一次函数调用,调用的是0作为地址处的函数。

  1. 把0强制类型转换为:无参,返回类型是void的函数的地址

2.调用0地址处的这个函数

二、做一个计算器

#define _CRT_SECURE_NO_WARNINGS 1
#include

void cd()
{
	printf("------------------------------------------------------");
	printf("1.add     2.sub     3.mul     4.div        0.esc");
	printf("------------------------------------------------------");
}

int add(int x, int y)
{
	return x + y;
}

int sub(int x, int y)
{
	return x - y;
}

int mul(int x, int y)
{
	return x * y;
}

int div(int x, int y)
{
	return x / y;
}


int main()
{
	int input = 0;
	int x = 0;
	int y = 0;
	int ret = 0;
	do
	{
		cd();
		printf("请选择:》");
		scanf("%d", &input);
		printf("请输入两个数:》");
		scanf("%d %d", &x, &y);
		switch (input)
		{
		case 1:
			ret = add(x, y);
			printf("%d\n", ret);
			break;
		case 2:
			ret = sub(x, y);
			printf("%d\n", ret);
			break;
		case 3:
			ret = mul(x, y);
			printf("%d\n", ret);
			break;
		case 4:
			ret = div(x, y);
			printf("%d\n", ret);
			break;
		case 0:
			printf(" tui");
			break;
		default:
			printf("选择错误");

		}

	} while (input);

	return 0;
}

你可能感兴趣的:(c语言,开发语言,监督学习,学习)