9.5 数组的指针和指向数组的指针变量-2

news2025/1/17 2:55:16

9.5 数组的指针和指向数组的指针变量-2

  • 一.数组名作为函数参数
    • (1)实参和形参都是数组名
    • (2)实参用数组名,形参用指针变量
    • (3)实参和形参都用指针变量,这个和(2)很类似
    • (4)实参为指针,形参为数组名
  • 二.整理来源

一.数组名作为函数参数

如果一个实参的数组,想在函数中改变此数组的元素的值,实参和形参的对应关系可以 有4种:

(1)实参和形参都是数组名

a是实参数组首地址,那么ba是形参数组首地址,a和ba共用一段内存,也就是说,在调用changevalue期间,a和ba指的是同一个数组。

void changevalue(int ba[])
{
    ba[3] = 27;   //这是把内存赋值,所以这个值会被带回到调用者。
    ba[4] = 45;
    return;
}


int main()
{
    int a[5];    //能引用的下标a[0]  -  a[4]
    a[0] = 85; a[1] = 70; a[2] = 98; a[3] = 92; a[4] = 78;
    printf("a[0] = %d,a[1] = %d,a[2] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);
    changevalue(a);
    printf("-------------------------------------------------------------------------\n");
    printf("a[0] = %d,a[1] = %d,a[2] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);

    return;
}

(2)实参用数组名,形参用指针变量

void changevalue(int *p)
{
    //这里要注意,一定要指定数组a的数组元素范围是a[0]-a[4],这意味着你最多能够引用到的是*(p+4)
   *(p+2) = 888;   //等价于给a[2]赋值。

    return;
}

int main()
{
    int a[5];    //能引用的下标a[0]  -  a[4]
    a[0] = 85; a[1] = 70; a[2] = 98; a[3] = 92; a[4] = 78;
    printf("a[0] = %d,a[1] = %d,a[2] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);
    changevalue(a);
    printf("-------------------------------------------------------------------------\n");
    printf("a[0] = %d,a[1] = %d,a[2] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);

    return;
}

(3)实参和形参都用指针变量,这个和(2)很类似

void changevalue(int *p)
{
    //这里要注意,一定要指定数组a的数组元素范围是a[0]-a[4],这意味着你最多能够引用到的是*(p+4)
   *(p+2) = 888;   //等价于给a[2]赋值。

    return;
}


int main()
{
    int a[5];    //能引用的下标a[0]  -  a[4]
    a[0] = 85; a[1] = 70; a[2] = 98; a[3] = 92; a[4] = 78;
    printf("a[0] = %d,a[1] = %d,a[2] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);
    int *pa = a;     //把数组a的首地址给pa,然后传递pa过去(定义时初始化)
    changevalue(pa); //实参是指针变量,则该指针变量必须有确定的值。
    printf("-------------------------------------------------------------------------\n");
    printf("a[0] = %d,a[1] = %d,a[2] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);


    return;
}

(4)实参为指针,形参为数组名

把指针传递给数组名,那这个数组名就相当于这个数组的首地址。
换一种理解方式:把形参数组名也当成指针看待,是一个指向数组a的首地址的指针。

void changevalue(int ba[])
{
    //这里要注意,ba引用数组下标时也不能超过main中定义的a数组,可引用数组元素范围是a[0]-a[4]
    ba[3] = 27;   //这是把内存赋值,所以这个值会被带回到调用者。
    ba[4] = 45;
    return;
}

int main()
{
    int a[5];    //能引用的下标a[0]  -  a[4]
    a[0] = 85; a[1] = 70; a[2] = 98; a[3] = 92; a[4] = 78;
    printf("a[0] = %d,a[1] = %d,a[2] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);
    int *pa = a;     //把数组a的首地址给pa,然后传递pa过去(定义时初始化)
    changevalue(pa); //实参是指针变量,则该指针变量必须有确定的值。
    printf("-------------------------------------------------------------------------\n");
    printf("a[0] = %d,a[1] = %d,a[2] = %d,a[3] = %d,a[4] = %d",a[0],a[1],a[2],a[3],a[4]);

    return;
}

在这里插入图片描述

二.整理来源

整理至https://appd872nnyh9503.pc.xiaoe-tech.com/index的笔记

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

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

相关文章

Leetcode-day1【80】删除有序数组中的重复项 II

文章目录 80. 删除有序数组中的重复项 II题目解题思路解题思路【学习】双指针 80. 删除有序数组中的重复项 II 题目 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。…

CBAM小陈读paper系列

忘记做笔记了,只能 把看文章的PDF保存下来了

神经网络:Zero2Hero 1

Zero → \to → Hero : 1 实现了一个字符级中文语言模型,数据采用的是开源中文姓名数据集中的一部分,主要内容如下: 字符的预处理 统计频次计算字符对频次矩阵 实现一个简单的先验概率模型 从训练数据中计算字符的先验概率根据先验概率通过…

前端UI框架有哪些|20个优秀免费开源的WEB前端UI框架提高网站开发效率

最近准备学习一下前端UI我也是在网上找了很久最终整理出来了20个不错的前端UI框架网站,大家都知道很多成熟的前端框架可以直接引,学习框架可以提升我们网站的开发速度。有些大型公司的前端或者后端框架都是用自己开发的,对于大部分用户和公司来讲,我们可以用开源免费的前端…

TCP和UDP通信对比

tcp通信流程 服务器: 创建流式套接字 绑定 监听 提取 读写 关闭 客户端: 创建流式套接字 连接 读写 关闭 收发数据: read recv ssize_t recv(int sockfd, void *buf, size_t len, int flags); //flagsMSG_PEEK 读数据不会删除缓冲区的数据 write send ssize_t send(int…

【Paper Note】ViViT: A Video Vision Transformer

ViViT: A Video Vision Transformer AbstractOverview of vision transformer 回顾ViTEmbedding video clips 视频编码方式Uniform frame sampling 均匀采样Tubelet embedding 时空管采样初始化3D卷积代码介绍视频编码输入到模型当中 Transformer Models for VideoSpatio-tempo…

安全测试(linux基线排查)看这一篇就够了

前言部分: 作为一个安全测试人员,在确保WEB应用程序没有漏洞外,应该也需要关注一下主机环境的安全,因为应用程序部署在主机环境提供运行环境,也应当关注一下主机环境的安全。于此,通过学习本次对linux安全加…

香橙派pi5下,debian,docker19.03.9版本runc容器逃逸

在香橙派pi5下,debian,docker19.03.9版本下,安装系统后,启动docker,显示一切正常。 当加入k8s集群以后,可以正常连接到集群,node状态显示为ready。看起来一切正常。不过过一会之后,香橙派节点内存飙升,然后挂掉。重连失败,需要重启后才能重连。且swapoff -a命令执行…

C++之深入解析C++20协程的原理和应用

一、无栈协程成为 C20 协程标准 协程分为无栈协程和有栈协程两种,无栈指可挂起/恢复的函数,有栈协程则相当于用户态线程。有栈协程切换的成本是用户态线程切换的成本,而无栈协程切换的成本则相当于函数调用的成本;无栈协程和线程…

个人写校园点评项目的笔记

目录 ​编辑 1.解决短信登陆--2023.4.14 redis 数据类型 阿里云短信服务 存入redis的key和value 流程 dto的意义 给token设置有效期 拦截器的类没有交给Spring Constants 2.商户查询缓存(不采用SpringCache,而是尝试原理实现) 20…

Spring Cloud Alibab --Seata

事务特性 A(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失败的情况。 C(Consistency):一致性,在事…

Tarjan算法求割点和桥

先进行一些定义,假设目前有一个无向连通图 割点:某点及其边去掉后,图不再连通 桥:某条边去掉后,图不再联通 tarjan算法求割点 不考虑子结点到父结点的情况 dfn(x) x实际杯访问的时间点 low(x) x通过图可回溯到的最…

22从零开始学Java之你知道return、break与continue的区别吗?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中,壹哥给大家介绍了while、do-while两种循环结构,并且给大家总结…

KubeSphere 社区双周报 | OpenFunction 支持 Dapr 状态管理 | 2023.03.31-04.13

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2023.03.31-2023.…

测试工具之JMH详解

文章目录 1 JMH1.1 引言1.2 简介1.3 DEMO演示1.3.1 测试项目构建1.3.2 编写性能测试1.3.3 执行测试1.3.4 报告结果 1.4 注解介绍1.4.1 BenchmarkMode1.4.2 Warmup1.4.3 Measurement1.4.4 Threads1.4.5 Fork1.4.6 OutputTimeUnit1.4.7 Benchmark1.4.8 Param1.4.9 Setup1.4.10 Te…

大数据实战 --- 美团外卖平台

目录 开发环境 数据描述 功能需求 数据准备 数据分析 RDD操作 Spark SQL操作 创建Hbase数据表 创建外部表 统计查询 开发环境 HadoopHiveSparkHBase 启动Hadoop:start-all.sh 启动zookeeper:zkServer.sh start 启动Hive: nohup …

Netty中的HttpServerCodec和HttpObjectAggregator

首先使用Netty搭建一个HttpServer,代码如下: public class App {public static boolean useEpoll false;static {String os System.getProperty("os.name");if (Objects.nonNull(os) && os.equalsIgnoreCase("linux") &a…

Git分支篇git branch和git checkout

分支作用 在开发过程中,项目往往由多人协同开发,那么将多人编写的代码汇总到一起就成了一个困难且复杂的工作,另外项目也需要备份和版本迭代,因此不能只有一个版本。因此分支就成为了优秀的解决方案。 分支相互独立,…

C++STL详解(九)--使用红黑树封装实现set和map

文章目录 控制底层红黑树模板参数模板参数中的仿函数map,set中的正向迭代器map,set中的反向迭代器[]下标访问运算符重载map的模拟实现代码map的模拟实现适用map,set容器的底层红黑树代码(修改版本) 控制底层红黑树模板参数 如果我们用一棵KV模型的红黑树同时实现map和set,我们…

【数据结构】八大排序算法(梭哈)

目录 1.直接插入排序2. * 希尔排序关于希尔排序的时间复杂度 3.选择排序4. * 堆排序5.冒泡排序6. * 快速排序6.1递归快排6.1.1 hoare版6.1.2 挖坑法6.1.3 前后指针法6.1.4 关于每个区间操作的结束位置总是小于key6.1.5 关于有序原数据的效率优化 6.2 非递归快排 7. * 归并排序7…