当前位置: 首页 > news >正文

函数:计算数组的元素和

一、计算数组的元素和

参数传递给函数时,实际上只有数组的首地址作为指针传递给了函数。

在函数定义中的int a[ ]等价于int *a。在只有地址信息的情况下,是无法知道数组里有多少个元素的,因此在计算数组中的元素和时,要加一个参数——数组的元素个数。

#include<stdio.h>
//#include<string.h>
#include<math.h>
int sum(int* a, int n) {int ans = 0;for (int i = 0; i < n; i++)ans += a[i];return ans;
}/*在函数调用时,a不一定非要传递一个数组,例如:*/
int main() {int a[] = { 1,2,3,4 };printf("%d\n", sum(a + 1, 3));    //利用指针的加减法把要开始相加元素的地址传给函数return 0;
}

一般地,若p是指针,k是正整数,则p+k就是指针p后面第k个元素,p-k是p前面的第k个元素,而如果p1、p2 是同类型的指针,则p2-p1是从p2到p1的元素个数(不含p2)

 二、计算左闭右开区间内的元素和

写法一:

#include<stdio.h>
//#include<string.h>
#include<math.h>
int sum(int* begin, int* end) {int n = end - begin;int ans = 0;for (int i = 0; i < n; i++)ans += begin[i];return ans;
}
/*测试函数————计算左闭右开区间内的元素和:*/
int main() {int a[] = { 1,2,3,4 };printf("%d\n", sum(a + 1, a+3));    //利用指针的加减法把要开始相加元素的地址传给函数return 0;
}

 写法二:更具一般性,用一个新指针p作为循环变量,同时累加其指向的值

#include<stdio.h>
//#include<string.h>
#include<math.h>
int sum(int* begin, int* end) {int* p = begin;int ans = 0;for (int* p = begin; p != end; p++)ans += *p;return ans;
}
/*测试函数————计算左闭右开区间内的元素和:*/
int main() {int a[] = { 1,2,3,4 };printf("%d\n", sum(a + 1, a+3));    //利用指针的加减法把要开始相加元素的地址传给函数return 0;
}

数组在传参时的注意点

1. 数组传递的方式: 在C语言中,数组的传递通常使用指针来实现。当你传递一个数组作为函数参数时,实际上传递的是数组的首地址,也就是数组的第一个元素的地址。函数中可以通过指针来访问和修改数组中的元素。这种传递方式可以避免在内存中复制整个数组,提高了效率。

2. 数组大小的传递:在函数中传递数组时,通常需要额外传递数组的大小信息,以便函数知道数组的长度。这样可以避免在函数内部发生数组越界的错误。可以通过传递数组大小作为参数,或者在数组的末尾使用一个特定的值来表示数组的结束。

3. 数组的修改: 在函数中传递数组时,函数可以修改数组中的元素。这是因为数组传递的是数组的地址,函数可以通过指针来访问和修改数组中的元素。注意,在函数内部修改数组的元素会对原始数组产生影响。

4. 数组的长度限制: 在C语言中,数组的长度是固定的,一旦定义了数组的大小,就不能再改变。因此,在传递数组时需要确保函数中不会越界访问数组。如果需要处理可变长度的数据,可以考虑使用动态内存分配(如“malloc”和“free”)来创建和释放数组。

5. 数组的一维和多维传递:对于一维数组,可以直接将数组作为参数传递给函数。而对于多维数组,需要指定每个维度的大小,并使用适当的方式进行传递。可以使用指针或者使用数组指定每个维度的大小。

 参考书籍:《算法竞赛入门经典(第二版)》作者:刘汝佳

相关文章:

函数:计算数组的元素和

一、计算数组的元素和 参数传递给函数时&#xff0c;实际上只有数组的首地址作为指针传递给了函数。 在函数定义中的int a[ ]等价于int *a。在只有地址信息的情况下&#xff0c;是无法知道数组里有多少个元素的&#xff0c;因此在计算数组中的元素和时&#xff0c;要加一个参…...

如何进行数据库分库分表

当数据库的数据量增长到一定程度&#xff0c;单一数据库或表可能会遇到性能瓶颈&#xff0c;此时分库分表是一种常见的解决方案。以下是如何进行数据库分库分表的详细步骤和考虑因素&#xff0c;结合了参考文章中的相关信息&#xff1a; 一、分库分表概述 分库分表是为了解决…...

Spring-Cloud-CircuitBreaker-Resilience4j (3.1.1)

介绍 Resilience4j 是一个专为函数式编程而设计的轻量级容错库。Resilience4j 提供高阶函数&#xff08;装饰器&#xff09;&#xff0c;以增强任何功能接口、lambda 表达式或方法引用&#xff0c;包括断路器、速率限制器、重试或隔板。您可以在任何函数接口、lambda 表达式或…...

重构与优化-组织数据(3)

重构组织数据是一个系统性的工程,旨在改进数据的存储方式、访问效率、质量和可用性,以更好地支持业务运营、分析决策和未来发展。以下是重构组织数据的一些关键说明点: 目的与动机 提升效率:通过优化数据结构、减少冗余数据和改善索引策略,加快数据查询和处理速度。 增强…...

游戏交易平台源码游戏帐号交易平台系统源码

功能介绍 1&#xff1a;后台可以添加删除游戏分类 2&#xff1a;会员中心可以出售游戏币,账号&#xff0c;装备 3&#xff1a;后台可以对会员和商品进行管理 4&#xff1a;多商家入驻,商家发布信息 5&#xff1a;手机版功能可以生成APP 6&#xff1a;在线支付可支持微信和支…...

Matlab里面的浮点数与FPGA定点数的相互转化应用(含Matlab代码,封装成函数可直接调用)

微信公众号获取更多FPGA相关源码&#xff1a; 1.前言 Matlab里面计算通常用的是浮点数&#xff0c;而FPGA在做数字信号处理时&#xff0c;为了节约资源&#xff0c;常常使用的是定点数。在实践中&#xff0c;我们经常需要将Matlab实现中的算法&#xff0c;用FPGA进行实现。 …...

机器学习笔记——欠拟合、过拟合

欠拟合 将训练损失和测试损失都比较大的拟合叫欠拟合&#xff0c;那么他的预测精度很低 1.一般出现在模型的复杂度小于数据本身的复杂度导致的&#xff0c;这个可能就是模型对数据的分布和实际数据分布之间的差异&#xff0c;这个就可能需要更换模型 2.还可能出现在梯度下降算…...

【二进制部署k8s-1.29.4】七、验证master的安装

文章目录 简介 一.确认kubectl命令是否正常运行二.确认etcd安装是否正常运行三.确认kube-apiserver,kube-controller-manager,kube-scheduler安装是否正常四.配置apiserver和kubelet的访问授权五.master端安装脚本4.1.安装master端所需文件4.2.master快捷安装脚本 简介 本章节主…...

springboot获取当前数据库连接

要获取当前 Spring DataSource 的 URL&#xff0c;可以通过以下几种方法&#xff1a; 方法一&#xff1a;使用 JdbcTemplate 如果你使用的是 Spring 的 JdbcTemplate&#xff0c;可以通过 javax.sql.DataSource 获取连接&#xff0c;再获取它的 URL。 示例代码&#xff1a; …...

【学习笔记】Windows GDI绘图(九)Graphics详解(上)

文章目录 Graphics 定义创建Graphics对象的方法通过Graphics绘制不同的形状、线条、图像和文字等通过Graphics操作对象坐标 Graphics属性Clip(裁切/绘制区域)ClipBounds获取裁切区域矩形范围CompositiongMode合成方式CompositingQuality渲染质量DpiX和DpiY 水平、垂直分辨率Int…...

公告:公众号铁粉粉丝介绍以及说明

大家好&#xff0c;我是公众号博主--夏目 机械电气电机杂谈是我个人建立&#xff0c;为分享机械&#xff0c;电气&#xff0c;电机知识为主&#xff0c;闲谈杂聊社会时事&#xff0c;职场见闻&#xff0c;生活琐事&#xff0c;成长趣事&#xff0c;学习心得&#xff0c;读书观影…...

BioTech - 使用 CombFold 算法 实现 大型蛋白质复合物结构 的组装过程

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/139242199 CombFold 是用于预测大型蛋白质复合物结构的组合和分层组装算法,利用 AlphaFold2 预测的亚基之间的成对相互作用。 CombFold 算法的关键特点包括: 组合和…...

代码随想录算法训练营第36期DAY46

DAY46 完全背包 在闫氏DP法里学过&#xff1a;第i个物品选k个&#xff0c;纸质直至不能选&#xff0c;k从0开始取。就有递推式了。 代码随想录的视频也看了。 518零钱兑换ii 注意与 目标和 那题区分开。 完全背包问题&#xff0c;正向遍历背包容量&#xff0c;就能实现“多次…...

港湾周评|李小加“刀刃向内”裁员

《港湾商业观察》李镭 近年来争议颇大的滴灌通风波不断。 在交100万付费上班不久&#xff0c;最新又被曝出裁员。这位前港交所总裁、金融圈鼎鼎大名的李小加&#xff0c;没想到成立不足三年便迎来了重大挑战。 日前&#xff0c;滴灌通确认了公司组织架构已经调整&#xff0c…...

超大功率光伏并网逆变器学习(三相)

1.超大功率用的IGBT开关频率通常很低,比如6KHz 2.线电压和相电压的关系 相电压 A AB线电压-CA线电压 相电压 B BC线电压-AB线电压 相电压 C CA线电压-BC线电压 3.坐标变换 ABC三相信号通过Clark坐标变换得到αβ两相静止信号,其中α与A相重合,β与α…...

大豆、棉花深度学习数据集大合集

最近收集了一大波关于大豆和棉花的深度学习数据集&#xff0c;主要有叶片的识别、分类、计数以及病害检测等。 数据集的价值 科研价值&#xff1a;这些数据集为植物学、农业信息技术、机器学习等领域的科研人员提供了宝贵的资源。它们可以用于训练和优化各种深度学习模型&…...

教育数字展馆助力全球教育传播,科技引领数字化教育潮流

一、教育数字展馆助力教育传播 1、提高教育资源的可及性 教育数字展馆通过VR和WEB3D技术&#xff0c;将丰富的教育资源呈现在用户面前。不论是名校的经典课程&#xff0c;还是专家的精彩讲座&#xff0c;均可通过教育数字展馆实现线上展示。用户只需登录平台&#xff0c;即可…...

14.微信小程序之地理定位功能

目录 1.地理定位介绍 1.1 申请开通 1.2 使用方法 2.拒绝授权后的解决方案 3.开通腾讯位置服务 4.LBS 逆地址解析 1.地理定位介绍 小程序地理定位是指通过小程序开发平台提供的 API&#xff0c;来获取用户的地理位置信息。用户在使用小程序时&#xff0c;可以授权小程序获…...

理解lambda表达式

Lambda表达式&#xff1a; 这里不再过多叙述什么事lambda表达式&#xff0c;就说下怎么使用&#xff0c;首先和lambda表达式同时存在的就是另一个定义&#xff0c;就是匿名内部类。匿名内部类首先需要一个接口。 下面用一个例子说明lambda表达式&#xff1a; public class Hel…...

【面试】Java的前端编译器和后端编译器

目录 1. 说明2. 前端编译器2.1 主要功能2.2 工作原理 3. 后端编译器3.1 主要功能3.2 工作原理 1. 说明 1.在Java的编译过程中&#xff0c;编译器通常被划分为前端编译器和后端编译器&#xff0c;各自负责不同的任务。2.前端编译器主要负责源代码的词法分析、语法分析和语义检查…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...