C语言从头学29 — 数组(二)

四、数组的地址(继续前文编号)
       数组是连续有序储存的同类型值,只要获得首地址(第0个成员的内存地址),其它成员的地址也就知道了,就能遍历整个数组。比如,声明一个数组:int arr[5]={1,2,3,4,5}; 又 int* p=&arr[0]; 那么指针p中保存的就是数组 arr 的首地址,故有*p值是1; ( 首个成员的值 )。C语言为简化计,规定数组名等同于数组首地址,即有 *p=arr; 。 如此,把数组名传入一个函数,就等同于传入一个指针变量。在函数内部,就可以通过这个指针变量获得整个数组。
       同理,对于二维甚至多维数组,数组名也是这些数组的首地址。
五、数组指针的加减计算
       仍接上面的例子,p是指向数组 arr 首地址指针,*p的值是1;接下来我们给p加上1,此时 *(p+1) 的值就是2;也就是说,首地址指针加上n则指针就指向第n个成员(注意我们讲地址还有第几个成员均从0开始计),然后用 *(p+n) 就能取出这个地址的值。指针能加也能减,减就是指针指向回退一个成员。十分注意的是指针加减后的结果不能越界。
       由于指针p与数组名arr等价,所以用*(arr+n)来取第n个成员的值也是一样的。
       关于数组的地址及指针加减运算我们用一个例子做说明:

#include<stdio.h>
void myArr(int* arr)
{int* p = arr; //p指向第0号成员int temp = *p;printf("数组arr的第0号成员是:%d\n", temp);p = p + 4;//p指向了第4号成员temp = *p;printf("数组arr的第4号成员是:%d\n", temp);p = p - 2;//p从4回退2个位置指向2号成员temp = *p;printf("数组arr的第2号成员是:%d\n", temp);
}
int main(void)
{int arr[5] = { 1,2,3,4,5 };myArr(arr);printf("-----------------------\n");printf("数组arr的第2号成员是:%d\n", *(arr + 2)); //用arr替代p进行计算getchar();return 0;
}

运行结果:
       数组arr的第0号成员是:1
       数组arr的第4号成员是:5
       数组arr的第2号成员是:3
       -----------------------
       数组arr的第2号成员是:3
六、数组的复制
       数组名字是指针,所以复制数组名字并不是真正的复制数组,而是复制了一个指针,原指针和复制指针共同指向同一个数组,如果原数组消失则复制的数组也不存在了。
       简单的复制方法是利用循环一个成员一个成员的完成复制,具体可看下面代码:

   int arr[5] = { 1,2,3,4,5 };int arrBak[5] = { 0 };for (int i = 0; i < 5; i++) arrBak[i] = arr[i]; //逐个成员复制for (int i = 0; i < 5; i++) printf("%d  ", arrBak[i]); //显示复制结果

运行结果:1  2  3  4  5(复制完成)
       对于二维或者多维数组,复制需要开双重循环或多重循环。
       还有一种赋值方法,就是调用memcpy() 函数直接把数组所在的那一段内存再复制出一份。memcpy()有3个参数:
     参1 目标数组名 参2 源数组名 参3 目标数组字节长度。见下例:

    int arr[5] = { 1,2,3,4,5 };int arrBak[5];memcpy(arrBak, arr,sizeof(arrBak)); //完成复制for (int i = 0; i < 5; i++) printf("%d  ", arrBak[i]); //显示复制结果

运行结果:1  2  3  4  5(结果与循环方法相同,函数方法速度快于循环方法)
       说明:由于版本不同,memcpy是否包含在<stdio.h>不能确定,如报错请包含<string.h>。
七、数组作为函数的参数
       1. 数组作为函数的参数,一般会同时传入数组名和数组成员数。由于数组名是一个指针,如果只传数组名,那么函数
只知道数组开始的地址,不知道有几个成员。如果函数的参数是多维数组,那么除了第一维的成员数可以当作参数传入函数,
其他维的成员数需要写入函数参数声明。()
      2.数组字面量作为函数参数,直接将数组字面量传入函数。方法是带有大括号的数组各成员的值直接放到参数名的位置,后边再跟上数组成员数这个参数;然后在大括号前面一对小括号,括号里是函数数组参数声明(但把数组名去掉)。这种方式类似于用数组类型对传入的字面量(数组成员值)进行强转,让编译器明白这组值的类型。
       以上两项,特别是第2项用语言表达不是很明白,还是放到下面的例子中进一步说明,代码如下:

 #include<stdio.h>
int mySum(int a[][5], int n)
{int sum = 0;for (int i = 0; i < n; i++){for (int j = 0; j < 5; j++){sum += a[i][j];}}return sum;
}
int main(void)
{ int arr[2][5] = { {1, 2, 3, 4, 5},{6, 7, 8, 9, 10} };int sum=mySum(arr, 2); //传入数组名及第一维成员数printf("%d\n", sum); //运算结果:55sum = mySum((int[][5]) { {1, 2, 3, 4, 5}, { 6, 7, 8, 9, 10 } }, 2);//将数组字面量直接及第一维成员数直接传入函数,注意(int[][5])中无数组名,只剩类型printf("%d\n", sum);//运算结果:55getchar();return 0;
}    

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

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

相关文章

英灵神殿mac能玩吗 英灵神殿对电脑配置要求《英灵神殿》新手攻略查询 PD虚拟机能玩英灵神殿吗

近年来&#xff0c;随着《英灵神殿》&#xff08;Valheim&#xff09;游戏的火热&#xff0c;越来越多的玩家被其独特的北欧神话题材和丰富的生存挑战所吸引。然而&#xff0c;对于Mac用户来说&#xff0c;如何在Mac平台上运行这款游戏可能是一个问题。此外&#xff0c;作为一名…

数据库day1

MySQL的安装&#xff1a; 采用MySQL的zip格式安装

原创作品—— 文旅类、教育类网站设计

文旅类网站设计应追求简约风格&#xff0c;利用空白和少量文字突出关键信息&#xff0c;吸引用户眼球。同时&#xff0c;采用高质量图片和视频展示文化特色&#xff0c;提升视觉体验。 确保核心功能如搜索、预订、景点介绍等显眼易用&#xff0c;提供清晰的导航栏和响应式设计&…

基于OpenMV识别数字及程序说明

OpenMV简介 OpenMV是一个开源、低成本且功能强大的机器视觉模块。它基于STM32F427CPU&#xff0c;集成了OV7725摄像头芯片&#xff0c;能在小巧的硬件模块上&#xff0c;用C语言高效地实现核心机器视觉算法&#xff0c;并提供了Python编程接口&#xff0c;使得图像处理的复杂度…

探索迁移学习:通过实例深入理解机器学习的强大方法

探索迁移学习&#xff1a;通过实例深入理解机器学习的强大方法 &#x1f341;1. 迁移学习的概念&#x1f341;2. 迁移学习的应用领域&#x1f341;2.1 计算机视觉&#x1f341;2.2 自然语言处理&#xff08;NLP&#xff09;&#x1f341;2.3 医学图像分析&#x1f341;2.4 语音…

数字信号处理教程(2)——时域离散信号与时域离散系统

上回书说到数字信号处理中基本的一个通用模型框架图。今天咱们继续&#xff0c;可以说今天要讲的东西必须是学习数字信号处理必备的观念——模拟与数字&#xff0c;连续和离散。 时域离散序列 由于数字信号基本都来自模拟信号&#xff0c;所以先来谈谈模拟信号。模拟信号就是…

Mybatis一级缓存

缓存 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis 3 中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。 Mybatis和Hibernate一样&#xff0c;也有一级和二级缓存&#xff0c;同样默认开启的只有一级缓存&#xff0c;二级缓…

奇瑞被曝强制加班,“896”成常态且没有加班费

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 7 月 2 日消息&#xff0c;一位认证为“奇瑞员工”的网友近期发帖引发热议&#xff0c;奇瑞汽车内部存在强制加班行为&#xff0c;每周加班时长需大于 20 小时并且没有加班费&#xff0c;仅补贴 10 元…

Linux-gdb

目录 1.-g 生成含有debug信息的可执行文件 2.gdb开始以及gdb中的常用执行指令 3.断点的本质用法 4.快速跳出函数体 5.其他 1.-g 生成含有debug信息的可执行文件 2.gdb开始以及gdb中的常用执行指令 3.断点的本质用法 断点的本质是帮助我们缩小出问题的范围 比如&#xff0c;…

Linux动态库的制作

Linux操作系统支持的函数库分为&#xff1a; 静态库&#xff0c;libxxx.a&#xff0c;在编译时就将库编译进可执行程序中。 优点&#xff1a;程序的运行环境中不需要外部的函数库。 缺点&#xff1a;可执行程序大 动态库&#xff0c;又称共享库&#xff0c;libxxx.so&#…

cv2.cvtColor的示例用法

-------------OpenCV教程集合------------- Python教程99&#xff1a;一起来初识OpenCV&#xff08;一个跨平台的计算机视觉库&#xff09; OpenCV教程01&#xff1a;图像的操作&#xff08;读取显示保存属性获取和修改像素值&#xff09; OpenCV教程02&#xff1a;图像处理…

NSSCTF-Web题目22(弱比较、数组绕过)

目录 [鹤城杯 2021]Middle magic 1、题目 2、知识点 3、思路 [WUSTCTF 2020]朴实无华 4、题目 5、知识点 6、思路 [鹤城杯 2021]Middle magic 1、题目 2、知识点 代码审计&#xff0c;弱比较、数组绕过 3、思路 打开题目&#xff0c;出现源代码&#xff0c;我们进行审…

强行仅用time.localtime制作“日历牌”——全程记录“顶牛”“调戏”我的AI学习搭子

强行只用time.localtime制作“日历牌”&#xff0c;码好代码试炼通过&#xff0c;想榨取ai智能优化算法&#xff0c;结果失败。本文详细记录“顶牛”全过程。 (笔记模板由python脚本于2024年07月01日 19:16:26创建&#xff0c;本篇笔记适合喜欢python&#xff0c;喜欢搞“事儿”…

安装Gitlab+Jenkins

GItlab概述 GitLab概述&#xff1a; 是一个利用 Ruby on Rails 开发的开源应用程序&#xff0c;实现一个自托管的Git项目仓库&#xff0c;可通过Web界面进行访问公开的或者私人项目。 Ruby on Rails 是一个可以使你开发、部署、维护 web 应用程序变得简单的框架。 GitLab拥有与…

【hot100】跟着小王一起刷leetcode -- 739. 每日温度

【hot100】跟着小王一起刷leetcode -- 739. 每日温度 739. 每日温度题目解读思路 代码总结 739. 每日温度 题目解读 739. 每日温度 老规矩&#xff0c;咱先看下题目。总结下来就是&#xff0c;你要返回一个answer数组&#xff0c;answer[i]中存储的应该是temperatures数组中…

解决ps暂存盘已满的问题

点击编辑->首选项->暂存盘 ps默认暂存盘使用的是c盘&#xff0c;我们改成d盘即可 然后重启ps

​​​​​​​​​​​​​​Spark Standalone集群环境

目录 Spark Standalone集群环境 修改配置文件 【workers】 【spark-env.sh】 【配置spark应用日志】 【log4j.properties】 分发到其他机器 启动spark Standalone 启动方式1&#xff1a;集群启动和停止 启动方式2&#xff1a;单独启动和停止 连接集群 【spark-shel…

详细介绍MySQL的索引(下)

索引的使用 同一条数据在未创建索引的情况下耗时&#xff1a; nick字段是未创建索引的 select * from t_user WHERE nick 邹丽;SHOW PROFILES; 耗时为&#xff1a; user_account字段创建了唯一索引 select * from t_user WHERE user_account 13781945844;SHOW PROFILES;…

PHP验证日本固定电话号码

日本电话号码格式众多&#xff0c;验证起来比较头大&#xff0c;现在咱们来一个简单的总结哈 为了简单起见&#xff0c;使用PCRE 函数preg_match通过匹配正则表达式来实现验证。 function checkGdTelLandline(string $str): int|false {return preg_match("/\A0(\d{1}[-…

安装 VisualSVN Server提示HTTP服务无法启动的问题解决

安装 VisualSVN Server 版本&#xff1a;VisualSVN-Server-5.4.0-x64 安装包在安装到一半的时候&#xff0c;弹窗提示&#xff1a;HTTP服务无法启动&#xff0c;网上找了一大堆&#xff0c;说是service里面更改用户为本地用户什么的都没用用&#xff0c;点右键也无法启动。 …