【教材】2022/11/27[指针] 指针与函数基础

news2025/1/23 10:31:26

程序:求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是函数名。*表示此函数返回值类型是指针。

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

#include<stdio.h>
int main()
{
	int* maxc(int x, int y);//maxc函数返回的类型是地址!
	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;

}

结果如下:

程序2:有3个学生,每个学生有4门课程的成绩。要求在用户输入学生序号以后,能输出该学生的全部成绩。用指针函数来实现。

#include<stdio.h>
int main()
{
	float score[][4] = { {60,70,80,90},{56,89,67,88},{34,78,90,66} };
	float* search(float(*pointer)[4], int n);//函数形参为指向行的指针
	float* p;
	int i, k;
	printf("enter the number of student:");
	scanf_s("%d", &k);
	printf("the scores of NO.%d are:\n", k);
	p = search(score, k);//p是地址
	for (i = 0; i < 4; i++)
		printf("%5.2f\t", *(p + i));//这里的p已经是&score[][0]了
	printf("\n");
	return 0;
}

float* search(float(*pointer)[4], int n)
{
	float* pt;
	pt = *(pointer + n - 1);//第n位同学的列地址&score[n-1][0]
		return pt;
}

结果如下:

 

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

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

相关文章

day7【代码随想录】移除链表元素

文章目录一、链表定义二、移除链表元素&#xff08;力扣203&#xff09;1、直接使用原来的链表来进行删除操作2、设置一个虚拟头结点在进行删除操作三、删除链表中的节点&#xff08;力扣237&#xff09;一、链表定义 public class ListNode {// 结点的值int val;// 下一个结点…

如何安装Jmeter监控服务器资源插件(JMeterPlugins + ServerAgent 方法二)?

一、服务器端插件 1、下载链接:https://pan.baidu.com/s/1Is1kuC656cB0mC4vOLHyhw?pwd12f1 提取码:12f1 &#xff08;或者这个下载服务器插件&#xff1a;ServerAgent 下载地址&#xff1a;https://github.com/undera/perfmon-agent&#xff09; 2、服务器端插件 将下载的Se…

Redis最全详解(一)——基础介绍

Redis介绍 redis是基于内存可持久化的日志型、Key-Value数据库。redis安装在磁盘&#xff0c;但是数据存储在内存。非关系型数据库NoSql。开源免费&#xff0c;遵守BSD协议&#xff0c;不用关注版权问题。 redis作者github&#xff1a;github.com/antirez redis是一种基于键…

【数字信号去噪】小波阙值数字信号去噪和求信噪比【含Matlab源码 2191期】

⛄一、小波阈值法去噪概述 电能质量扰动信号的噪声大多以高斯白噪声的形式存在&#xff0c;利用小波变换对信号进行多分辨率分解&#xff0c;由于小波变换具有去除数据相关性的特点&#xff0c;故可以将有用信号与噪声的能量分离开来。信号中有效的信息主要集中在较大的小波系…

[阶段4 企业开发进阶] 2. Redis--实战篇

文章目录实战篇1 短信登录1.1 导入项目导入SQL有关当前模型导入后端项目导入前端工程运行前端项目1.2 基于Session实现登录流程1.3 实现发送短信验证码功能1.4 实现登录校验拦截器1.5 隐藏用户敏感信息1.6 session共享问题实战篇 1 短信登录 1.1 导入项目 导入SQL 有关当前模…

多监控系统产生的告警如何高效管理 - 运维事件中心

随着互联网服务深入千行百业&#xff0c;数字化成为企业和机构为用户提供服务的重要形式。在企业的IT基础架构趋于复杂化的过程中&#xff0c;运维管理工作的技术性也有了更高的要求。如果针对相关的故障&#xff0c;企业无法做到及时的发现和响应&#xff0c;将会延长上层业务…

ElasticSearch中基础API操作

1:首先我们需要连接ElasticSearch客户端&#xff0c;需要一个连接操作&#xff1a; RestHighLevelClient package com.atguigu.es.test;import org.apache.http.HttpHost; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient;…

分布式全局唯一ID生成方案(附源码)

1、概述 ID&#xff0c;全称Identifier&#xff0c;中文翻译为标识符&#xff0c;是用来唯一标识对象或记录的符号。比如我们每个人都有自己的身份证号&#xff0c;这个就是我们的标识符&#xff0c;有了这个唯一标识&#xff0c;就能快速识别出每一个人。 在计算机世界里&…

客快物流大数据项目(八十八):ClickHouse快速入门

文章目录 ClickHouse快速入门 一、​​​​​​​​​​​​​​安装ClickHouse&#xff08;单机&#xff09; 1、安装yum-utils工具包 2、添加ClickHouse的yum源 3、安装ClickHouse的服务端和客户端 4、关于安装的说明 5、查看ClickHouse的版本信息 二、在命令行中操作…

【深度思考】5年开发经验,不知道git rebase,是否应该被嘲笑?

最近逛脉脉&#xff0c;发现了一个热度挺高的帖子&#xff0c;一位同学发帖说&#xff1a;同事5年经验&#xff0c;竟然不知道git rebase&#xff0c;真牛批 ☆ 今天咱们不讨论git rebase是干什么用的&#xff0c;因为讨论半天可能三两句话就说出来了&#xff0c;实在没有意思&…

Linux的进程互调技术(多语言互调)

Linux的进程互调技术(多语言互调) 文章目录Linux的进程互调技术(多语言互调)1.函数与进程之间的相似性2.多语言程序互调技术1.函数与进程之间的相似性 如果你学过C语言&#xff0c;你应该有以下认识&#xff1a; 一个C程序由很多函数组成&#xff0c;一个函数可以调用另一个函数…

STC 51单片机42——汇编 定时器 舵机

ORG 0000H HighH EQU 30H; 定义变量&#xff0c;高电平高八位 TimerH EQU 31H; 定义变量&#xff0c;高电平高八位定时值 TimerL EQU 32H; 定义变量&#xff0c;高电平低八位定时值 Right BIT P2.0 ; 右转 Left BIT P2.1 ; 左转 N…

IDEA搭建SSM框架【配置类、新手向】

以下操作基于2020.3企业版 1.创建Java Enterprise项目 直接默认即可 输入项目相关信息 点击完成后&#xff0c;得到以下目录结构 2.搭建项目目录结构 java目录下 controller&#xff1a;实现控制转发&#xff0c;基本参数校验&#xff0c;不复杂的简单业务处理 config&#x…

SpringBoot实现多数据源(一)【普通版切换】

在实际开发中&#xff0c;经常可能遇到在一个应用中可能需要访问多个数据库的情况。以下是两种典型场景 业务复杂&#xff08;数据量大&#xff09; 数据分布在不同的数据库中&#xff0c;数据库拆了&#xff0c;应用没拆。一个公司多个子项目&#xff0c;各用各的数据库&#…

Springboot——拦截器

目录 一、拦截器概念 二、拦截器的使用 2.1 拦截器的创建&#xff08;preHandle实用性最强&#xff09; 2.2 将拦截器添加到容器当中 三、拦截器参数 3.1 获取请求头 request.getHeader 3.2 Object handler 是什么参数 3.3 ModelAndView modelAndView 3.4 Exception ex 3.…

多重定义的全局符号,链接器会如何链接的情况

多重定义的全局符号&#xff0c;链接器会如何链接的情况实例1&#xff1a;1.规则12.规则13.规则24.规则3实例2总结以下只针对于gcc编译器&#xff0c;而且不同环境&#xff0c;不同编译器的情况可能不同。 假如说有多重定义的全局符号&#xff0c;链接器会如何链接呐&#xff…

[论文评析]AdaptivePose: Human Parts as Adaptive Points,AAAI 2022

AdaptivePose: Human Parts as Adaptive Points文章信息背景AdaptivePose身体表示方法Body RepresentationAdaptivePosePart Perception ModuleEnhanced Center-aware BranchTwo-hop Regression BranchLoss function推理Inference总结References文章信息 论文题目&#xff1a;…

Spring Boot JPA 存储库派生查询示例

在之前的文章中&#xff0c;您已经知道如何使用JPQL和本机查询通过注释从数据库中检索数据。今天&#xff0c;我将向您展示如何使用派生查询方法在 Spring 引导中实现 Spring Data JPA 存储库查询&#xff1a;Query 派生查询方法的结构配置 Spring 引导应用程序以使用不同的数…

【教学类-19-02】20221127《ABCABC式-规律排序-A4竖版2份》(中班)

展示效果&#xff1a; 单人使用样式&#xff1a; 单页打印样式 ​ 背景需求&#xff1a; 中班幼儿需要掌握ABCABC的排序规律 ​ 前文制作了ABAB单元格色块&#xff0c;微调word表格的列数&#xff0c;调整python的参数&#xff0c;随机生成ABC排序样式&#xff0c;引导幼儿…

Android 单ABI架构适配指南:保姆级教学 INSTALL_FAILED_NO_MATCHING_ABIS

单ABI架构 64位 安装报错误详情如下 &#xff1a; Installation did not succeed. The application could not be installed: INSTALL_FAILED_NO_MATCHING_ABIS 产品需求&#xff1a; 单ABI架构支持拆解 迎合市场需求 32/64位独立包 目前项目ABI架构如下&#xff1a; …