c语言指针入门(二)

    今天学习了指针的两个常用场景,在此记录,以便后续查看。

场景1:传数组

    在c语言中,我们在定义函数的时候是没有办法直接传一个数组进去的,为了解决这个问题,我们一般将数组的名称当作一个指针参数传入到函数的参数列表中,因为数组的名称类似于一个常量指针,将其传入函数后,再传入数组的长度,就可以在函数内部访问这个数组。原因在于,指针记录的是一个地址,我们将这个地址作为一个参数传入方法内部时,相当于这个方法也访问到了这个地址,进而可以访问到这个数组。但这里有一个问题,我们一般在调用子函数时,传入的参数一般都是重新找一块地址将参数内容复制,子函数使用的是复制的部分,这样子函数就不会改变外部参数的值。但现在用指针的话,就不会进行复制了,而是直接访问同一地址,这样就可能对原数组进行更改。解决方法就是在传参时,给传入的指针前加上const,表示只读。这样原数组就不会被改变,如果子函数中尝试改变原数组,系统就会报错。举例如下:

#include <stdio.h>int CAL(int *p,int count) {int total = p[0];for (int i = 1; i < count; i++){total += p[i];}return total;}int main() {int a[] = {1,2,3,4,5};int b=CAL(a,5);printf("%d\n",b);return 0;}

结果:15

场景2:传回多个参数

    我们在声明函数时,c语言一般只能返回一个值,像其他语言,比如C#中,我们可以使用out参数来返回多个值,但c语言没有这种参数,我们一般用指针来进行多个参数的返回。就像上面说的,指针会指向一个地址,我们在传入参数时,我们假设想返回两个值,那我们就给函数传入两个指针,我们在内部改变这两个指针地址所存的数据后,我们在函数外部访问这个两个地址即可,即可完成多个参数的返回。举例如下:

#include <stdio.h>void TwoTotal(int *p,int count1,int *q,int count2,int *pp,int*qq) {*pp = p[0];for (int i = 1; i < count1; i++){*pp += p[i];}*qq = p[0];for (int i = 1; i < count2; i++){*qq += q[i];}}int main() {int p[] = { 1,2,3,4,5 };int q[] = {1,2,3,4,5,6,7};int total1 = 0;int total2 = 0;TwoTotal(p,5,q,7,&total1,&total2);printf("%d\n", total1);printf("%d\n", total2);return 0;}

结果:

15

28

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

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

相关文章

mysql主从复制的步骤和使用到的操作命令有哪些?

步骤&#xff1a; 配置主服务器&#xff08;Master&#xff09;&#xff1a; 启用二进制日志记录&#xff08;binary logging&#xff09;。配置主服务器的唯一标识&#xff08;server-id&#xff09;。创建用于复制的专用复制账户。 配置从服务器&#xff08;Slave&#xff0…

安装Pnetcdf顺便升级autoconf与automake

Netcdf NetCDF&#xff08;Network Common Data Form&#xff09;是一种用于存储科学数据的文件格式和软件库。它是一种自描述、可移植且可扩展的数据格式&#xff0c;广泛应用于气象学、海洋学、地球科学和其他领域的科学研究。 NetCDF文件以二进制形式存储&#xff0c;结构…

Qt | QGridLayout 类(网格布局)

01、上节回顾 Qt | QBoxLayout 及其子类(盒式布局)02、QGridLayout 简介 1、网格布局原理(见下图): 基本原理是把窗口划分为若干个单元格,每个子部件被放置于一个或多个单元格之中,各 单元格的大小可由拉伸因子和一行或列中单元格的数量来确定,若子部件的大小(由 sizeH…

Vue从入门到实战 Day08~Day10

智慧商城项目 1. 项目演示 目标&#xff1a;查看项目效果&#xff0c;明确功能模块 -> 完整的电商购物流程 2. 项目收获 目标&#xff1a;明确做完本项目&#xff0c;能够收获哪些内容 3. 创建项目 目标&#xff1a;基于VueCli自定义创建项目架子 4. 调整初始化目录 目…

网络安全之BGP详解

BGP&#xff1b;边界网关协议 使用范围&#xff1b;BGP范围&#xff0c;在AS之间使用的协议。 协议的特点&#xff08;算法&#xff09;&#xff1a;路径矢量型&#xff0c;没有算法。 协议是否传递网络掩码&#xff1a;传递网络掩码&#xff0c;支持VLSM&#xff0c;CIDR …

【15】编写shell-安装mysql

说明: 1、请注意mysql版本的压缩包格式 2、请注意挂载data盘 3、请注意部署包和shell脚本放在同一个文件夹 4、实现shell脚本自动化部署mysql5.7.40版本 # !/bin/bash#****************************************************** # Author : 秋天枫叶35 # Last modified …

Spring Boot 中 对话 Redis

Redis 是一款开源的&#xff0c;使用 C 开发的高性能内存 Key/Value 数据库&#xff0c;支持 String、Set、Hash、List、Stream 等等数据类型。它被广泛用于缓存、消息队列、实时分析、计数器和排行榜等场景。基本上是当代应用中必不可少的软件&#xff01; Spring Boot 对 Re…

oracle正则的使用

1、建表 create table person (first_name varchar2(20),last_name varchar2(20),email varchar2(40),zip varchar2(20)); insert into PERSON (first_name, last_name, email, zip) values (Steven, Chen, stevenhp.com, 123456); insert into PERSON (first_name, last_name…

ASP+ACCESS基于B2C电子商务网站设计

摘 要 运用ASP技术结合了Access数据库原理&#xff0c;基于B/S模式我们开发了一个网上购物系统。在我们的系统中&#xff0c;顾客可以很方便的注册成为会员&#xff0c;对商品进行浏览检索&#xff0c;查看商品的详细资料&#xff0c;然后根据各人的喜好购买心仪的商品。系统…

CCF20220901——如此编码

CCF20220901——如此编码 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,m,cnt1,a[1000],c[1000]{1};cin>>n>>m;for(int i1;i<n;i){cin>>a[i];cnt*a[i];c[i]cnt;}int b[1000]{0};for(int i1;i<n;i)b[i](…

JPHS-JMIR Public Health and Surveillance

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 JMIR Public Health and Surveillance是一本多学科期刊&#xff0c;专注于公共卫生创新与技术的交叉领域&#xff0c;包括公共卫生信息学、监测&#xff08;监测系统和快速报告&#xff…

CCF20220601——归一化处理

CCF20220601——归一化处理 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,a[1000],sum0;scanf("%d",&n);for(int i1;i<n;i){scanf("%d",&a[i]);suma[i];}double aver1.0,b0.0,d1.0;aversum/(n*1…

Java基础(三)- 多线程、网络通信、单元测试、反射、注解、动态代理

多线程基础 线程&#xff1a;一个程序内部的一条执行流程&#xff0c;只有一条执行流程就是单线程 java.lang.Thread代表线程 主线程退出&#xff0c;子线程存在&#xff0c;进程不会退出 可以使用jconsole查看 创建线程 有多个方法可以创建线程 继承Thread类 优点&#x…

【学习】实验室服务器常用的Linux指令。

1. 下载GitHub代码。 使用代码&#xff1a; git clone https://github.com/Turoad/CLRNet.git2. 压缩 / 解压。 打包压缩 是日常工作中备份文件的一种方式 在不同操作系统中&#xff0c;常用的打包压缩方式是不同的选项 含义 Windows 常用 rarMac 常用 zipLinux 常用 tar.gz…

学硕都考11408的211院校!河北工业大学计算机考研考情分析!

河北工业大学&#xff08;Hebei University of Technology&#xff09;&#xff0c;简称河北工大&#xff0c;坐落于天津市&#xff0c;由河北省人民政府、天津市人民政府与中华人民共和国教育部共建&#xff0c; 隶属于河北省&#xff0c;是国家“双一流”建设高校、国家“211…

自动化测试在软件开发生命周期中如何提高代码质量?

自动化测试是一种在软件开发生命周期中使用软件工具来执行测试的方法&#xff0c;它可以大大提高代码质量&#xff0c;减少开发过程中的错误和缺陷。本文将从零开始&#xff0c;详细且规范地介绍如何使用自动化测试来提高代码质量。 第一步&#xff1a;明确测试目标 在开始自…

webgl入门-绘制三角形

绘制三角形 前言 三角形是一个最简单、最稳定的面&#xff0c;webgl 中的三维模型都是由三角面组成的。咱们这一篇就说一下三角形的绘制方法。 课堂目标 理解多点绘图原理。可以绘制三角形&#xff0c;并将其组合成多边形。 知识点 缓冲区对象点、线、面图形 第一章 web…

Python高克勒-曼宁-斯特里克勒公式计算一维流量

&#x1f4dc;曼宁公式-用例 &#x1f4dc;Python流体数据统计模型和浅水渗流平流模型模拟 | &#x1f4dc;Python蒸发散物理问题(微积分-线性代数-拉普拉斯和傅立叶变换) ✒️Python计算一维流量 高克勒-曼宁-斯特里克勒公式公式基于一维&#xff08;横截面平均&#xff09…

iPhone实况照片从Windows资源管理器复制的JPG+MOV无法正常还原到iPhone

背景&#xff1a; 之前使用的iPhone 15 Pro&#xff0c;使用的Windows资源管理器当中复制导出的实况照片&#xff0c;复制出来的格式例如IMG_0001.JPG, IMG_0001.MOV。之后手机就卖掉了。现在使用的iPhone 14 Pro Max&#xff0c;想要导回之前备份的实况照片。尝试使用爱思助手…

Java18新特性

Java 18引入了若干新特性&#xff0c;以增强语言的功能性和性能。具体如下&#xff1a; 服务提供者接口&#xff08;Service Provider Interfaces, SPI&#xff09;&#xff1a;允许开发者为Java模块系统定义服务加载机制&#xff0c;从而能够更灵活地发现和加载服务实现。简单…