当前位置: 首页 > 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.前端编译器主要负责源代码的词法分析、语法分析和语义检查…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...

Qt 事件处理中 return 的深入解析

Qt 事件处理中 return 的深入解析 在 Qt 事件处理中&#xff0c;return 语句的使用是另一个关键概念&#xff0c;它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别&#xff1a;不同层级的事件处理 方…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...