2022/11/27[指针] 指针与函数基础

news2025/1/24 17:50:23

程序:求10个数的最大数

1、定义指向函数的指针变量调用函数的方法

 一般定义形式为:类型名 (*指针变量名)();

#include<stdio.h>
int main()
{
	int i, m, a[10], max(int* p);
	int (*f)();
	for (i = 0; i < 10; i++)
		scanf_s("%d", &a[i]);
	f = max;//max就是函数的地址,f也是地址
	m = (*f)(a);//a是实参
	printf("max=%d\n", m);
	return 0;
}
max(int* p)
{
	int i, t = *p;
	for (i = 1; i < 10; i++)
		if (*(p + i) > t)
			t = *(p + i);
	return t;
}

注意,指针变量的数据类型必须与被指向的函数类型一致

2、用指向函数的指针作为函数参数

在函数调用时把某几个函数的首地址传递给被调用函数,在被调用函数中就可以调用这几个函数了。

程序:编制函数func(),调用实现不同的功能:max,min,sum.

代码如下:

#include<stdio.h>
int max(int a, int b);
int min(int a, int b);
int sum(int a, int b);
void func(int a, int b, int(*fun)(int a, int b));

int main()
{
	int x, y;
	printf("enter 2 num:\n");
	scanf_s("%d%d", &x, &y);
	printf("max = ");
	func(x, y, max);//max必须先定义为一个函数,以下同理
	printf("min = ");
	func(x, y, min);
	printf("sum = ");
	func(x, y, sum);

}
void func(int a, int b, int (* fun)(int a, int b))
{
	int result;
	result = (*fun)(a, b);
	printf("%d\n", result);
}
int max(int a, int b)
{
	int c;
	c = (a > b) ? a : b;
	return c;
}
int min(int a, int b)
{
	int c;
	c = (a < b) ? a : b;
	return c;
}
int sum(int a, int b)
{
	int c;
	c = a + b;
	return c;
}

第一次调用func函数时,除了将x,y传递给形参a,b外,还将函数名max作为实参传递给形参fun,这是fun指向函数max();此时,func函数中的(*fun)(a,b)相当于max(a,b).

3、返回指针值的函数

一般定义类型为:

类型名 *函数名(参数表) 

例如:int *maxc(int x, int y)表示调用后可以得到一个指向整型数据的指针(地址)。

*的运算级低于(),因此maxc先于()结合,表明maxc是函数名。*表示此函数返回值类型是指针。

程序:下列函数把两个整数形参中较大的那个数的地址作为函数值传回

#include<stdio.h>
int main()
{
	int* maxc(int x, int y);
	int* p, i, j;
	printf("enter two number\n");
	scanf_s("%d%d" ,&i, &j);
	p = maxc(i, j);//p作为地址
	printf("max=%d\n", *p);
	return 0;
}
int* maxc(int x, int y)
{
	int* z;
	if (x > y)
		z = &x;
	else
		z = &y;
	return z;

}

结果如下:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/40087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛客网基础知识强化巩固-周结03

数组强化训练篇 2022-11-21 打卡 知识点总结 什么是渐进时间复杂度 渐进时间复杂度是指n趋于无穷时的复杂度。向有序表中任意一个位置插入元素&#xff0c;插入位置之后的元素依次挪动一个位置&#xff0c;假设元素插入的位置坐标为k&#xff0c;则时间复杂度为O(k)&#xf…

名词性从句

目录 1.名词性从句 1.1陈述句 1.2一般疑问句变名词性从句 1.3特殊疑问句变名词性从句 1.4特别的what 2.同位语从句 3.同位语从句与定语从句的区别 4.同位语从句的巅峰知识点 5.主语从句 5.2 并列主语从句 5.3主语从句巅峰知识点 6.宾语从句 主系表是不能被动的。所以第…

WPF-控件的常用属性-单例-隧道事件

特殊字符 小于< 大于> 空格xml:space"preserve" 例如&#xff1a;TextBox Grid.Column"1" xml:space"preserve">aaaaa .</TextBox> 从一个xaml文件中获取xaml内容 //DependencyObject是wpf控件的基类&#xff0c;它可以放到…

Ubuntu 安装“安装程序向硬盘复制文件时遇到错误[Errno 5] Input/output error”错误解决过程记录

前阵子装 Ubuntu&#xff0c;原本已经装了几百遍的系统它又双叒叕出问题了&#xff0c;问题内容就如标题看到的那样。解决过程中经历了很多坎坷&#xff0c;不过好在最后还是成功了~ 下面整理了一下我解决问题的过程&#xff0c;需要自取~ 方法 1&#xff1a;烧录 U 盘时文件格…

chapter3——处理多个时钟

目录1.多时钟域2.多时钟域设计的难题3.多时钟设计的处理技术时钟命名规则分模块设计跨时钟域4.跨时钟域同频零相位差时钟同频恒定相位差时钟非同频、可变相位差时钟整数倍频率的时钟非整数倍频率的时钟5.握手信号方法6.使用同步FIFO传输数据7.异步FIFO1.多时钟域 常见的多时钟…

linux环境验证c++程序库间调用

目录 0 背景 1 VMware、以及linux安装 2 安装QtCreator 2.1 下载速度慢&#xff0c;使用国内镜像 2.2 执行有问题&#xff0c;修改权限 2.3 验证是否可用 2.4 调试&#xff08;待解决&#xff09; 3 开发程序进行验证 4 其他问题 4.1 虚拟机与主机无法拷贝文件&#x…

python3-函数与参数以及空值

目录画星星空值None函数与Lambda一、函数定义二、引用变量查找三、传值调用函数四、函数对象五、函数文档旋转角度绘制函数图形画星星 程序2-7-7主要使用turtle.forward前进操作和turtle.left左转操作在屏幕上画星星。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- #2-7-…

操作符详解(1)

目录 一、操作符分类 二、算术操作符 三、位移操作符 1、<< 左位移操作符号 2、>> 右位移操作符 四、位操作符 1、& --- 按位与 2、| --- 按位或 3、^ --- 按位异或 变态题 五、赋值操作符 符合赋值符 一、操作符分类 操作符也被称为运算符。 …

小程序注册安装以及新手快速入门教程

一、注册并安装微信小程序 1.打开 https&#xff1a;//mp.weixin.qq.com/ 网址&#xff0c;点击立即注册即可进入小程序开发账号的注册流程&#xff0c;注册的账号类型选择小程序。 2.根据注册要求注册&#xff0c;发送邮箱信息&#xff0c;接收到微信团队发送的邮箱信息后&am…

水泥行业工业互联网平台(CCPS)解决方案

水泥行业经过过去十年的发展和调整&#xff0c;基本实现了集团化。集团管控当前面临的主要问题是数字的分散化和碎片化&#xff0c;建设工业互联网是新时期加强集团管控的必经之路。 CCPS平台优势 1.融合SOA理念的架构平台和系统框架。具有跨平台、易维护、可集成、可扩展、分…

Spark - 介绍及使用 Scala、Java、Python 三种语言演示

一、Spark Apache Spark 是一个快速的&#xff0c;多用途的集群计算系统&#xff0c; 相对于 Hadoop MapReduce 将中间结果保存在磁盘中&#xff0c; Spark 使用了内存保存中间结果&#xff0c; 能在数据尚未写入硬盘时在内存中进行运算。 Spark 只是一个计算框架, 不像 Hadoo…

几率波量子雷达/反事实量子通信

物理学中有哪些不可思议&#xff08;违背直觉&#xff09;的事实&#xff1f; - 知乎 利用粒子的双缝干涉原理&#xff0c;可以在物体偏离的情况下&#xff0c;探测到物体。 我们不需要用光子照射物体&#xff0c;就能感知到是否有物体存在。 这是什么意思&#xff1f; 这就…

3516DV300 推流

3516DV300 推流 基于ffmpeg将编码后的264文件&#xff08;或者直接推流&#xff09;推流出去&#xff0c;使用ffplay进行播放和验证。 ffmpeg版本&#xff1a;N-109124-g63db6a02a7 RELEASE&#xff1a;5.1.git ffmpeg udp文件推流 命令行 这里用的是开发板编码出的码流&…

MIT 6.S081 Operating System Lecture5 (随意的笔记)

系列文章目录 文章目录系列文章目录TrapsA questionsyscallTraps 用户空间和内核空间的切换通常被称为 trap example: shwrite()ecall(); //write 通过 ecall() 指令执行系统调用之后跳转执行到 usertrap 如下图的执行过程。最终sys_write将要显示的数据输出到 console 上 …

【Java 设计模式】创建者模式 之原型模式

原型模式1 定义2 角色3 三好学生案例3.1 浅克隆实现3.1.1 浅克隆定义3.1.2 类图3.1.3 实现3.2 深克隆实现3.2.1 深克隆定义3.2.2 实现1 定义 将一个已经创建好的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。 2 角色 抽象原型类&#xff1…

Chrome的使用技巧

1. 请求重发 F12 -> Network -> Replay XHR 2. 修改请求参数后重发 F12 -> Network -> Copy -> Copy as fetch 然后在 Console 控制台 ctrl + v ,而后就可以对请求的参数进行编辑,回车就会重更新请求 再在 Network 就可以看到这个请求了 3. 复制对象 (…

echarts入门到实战

官网地址&#xff1a;Apache ECharts 前言 我们应该经常看到或听到”数据可视化“这个词&#xff0c;他其实就是将数据通过各种图表更加直观的展现变化趋势&#xff0c;对比&#xff0c;峰值等等。数据可视化也是未来的趋势。 作为前端程序员&#xff0c;数据可视化也是我们必…

多任务全景感知YOLOPv2:目标检测、freespace、车道线

今年年初出了一片《端到端的多任务感知网络HybridNet&#xff0c;性能优于YOLOP》&#xff0c;论文 HybridNets: End2End Perception Network&#xff0c;代码已开源&#xff0c;在目标检测、车道线、freespace的多任务感知任务上性能优于YOLOP&#xff0c;取得了新SOTA。视频效…

大厂Java面试必备面试题:基础语法-数据类型-编码-注释-运算符-关键字-流程控制语句

基础语法 数据类型 Java有哪些数据类型 定义&#xff1a;Java语言是强类型语言&#xff0c;对于每一种数据都定义了明确的具体的数据类 型&#xff0c;在内存中分配了不同 大小的内存空间。 分类&#xff1a; 基本数据类型 Java源代码---->编译器---->jvm可执行的Java字…

如果Controller里有私有的方法,能成功访问吗?

背景 写代码的时候&#xff0c;复制粘贴的时候&#xff0c;没注意到方法的属性&#xff0c;就导致了Controller里有了一个私有的方法&#xff0c;然后访问这个接口的时候就报了空指针异常&#xff0c;找了好久才找到是这个原因。 来看一个例子 Service public class MyServi…