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/867567.shtml

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

相关文章

基于星火大模型的群聊对话分角色要素提取挑战赛

赛事任务与数据 2024 iFLYTEK A.I.开发者大赛-讯飞开放平台 (xfyun.cn) 从给定的<客服>与<客户>的群聊对话中, 提取出指定的字段信息&#xff0c;待提取的全部字段见下数据说明。 赛题方提供了184条真实场景的群聊对话数据以及人工标注后的字段提取结果&#xf…

AIGC专栏12——EasyAnimateV3发布详解 支持图文生视频 最大支持960x960x144帧视频生成

AIGC专栏12——EasyAnimateV3发布详解 支持图&文生视频 最大支持960x960x144帧视频生成 学习前言项目特点生成效果相关地址汇总项目主页Huggingface体验地址Modelscope体验地址源码下载地址 EasyAnimate V3详解技术储备Diffusion Transformer (DiT)Hybrid Motion ModuleU-V…

XXL-JOB中断信号感知

目录 背景 思路 实现逻辑 总结 背景 在使用xxl-job框架时&#xff0c;由于系统是由线程池去做异步逻辑&#xff0c;然后主线程等待&#xff0c;在控制台手动停止时&#xff0c;会出现异步线程不感知信号中断的场景&#xff0c;如下场景 而此时如果人工在控制台停止xxl-job执…

笔记13:switch多分支选择语句

引例&#xff1a; 输入1-5中的任意一共数字&#xff0c;对应的打印字符A,B,C,D,E int num 0; printf("Input a number[1,5]:"); scanf("%d"&#xff0c;&num); if( num 1)printf("A\n"); else if(num2)printf("B\n"); else i…

Alibaba Cloud Toolkit前端使用proxy代理配置

1、vscode 先安装插件 Alibaba Cloud Toolkit 2、前端代码&#xff1a; /personnel: {// target: http://xxx.xx.xxx.xx:9100, // 测试环境// target: http://xxx.xx.xxx.xx:9200, // 线上环境target: http://127.0.0.1:18002, // toolkit 代理changeOrigin: true,},3、打开插…

Android LayoutInflater 深度解析

在 Android 开发中&#xff0c;LayoutInflater 是一个非常重要的工具。它允许我们从 XML 布局文件中动态地创建 View 对象&#xff0c;从而使得 UI 的创建和管理更加灵活。本文将深入解析 android.view.LayoutInflater&#xff0c;包括它的基本用法、常见问题以及高级用法。 什…

MySQL架构和工作流程

引言&#xff1a;MySQL执行一条sql语句期间发生了什么&#xff1f; 想要搞清楚这个问题&#xff0c;我们必须了解MySQL的体系结构和工作流程 一、MySQL体系结构 MySQL由以下几个部分组成 一、server层 1.MySQL Connnectors连接器&#xff0c;MySQL的连接池组件&#xff0c;…

数据结构+算法-实现一个计算器

在学习栈的数据结构的时候讲到可以用栈来实现一个计算器的功能&#xff0c;那么这个功能是如何实现的呢&#xff1f; 采用栈模拟得方式来实现一个计算器 要实现如下的功能: 字符串如何转为整数 2.处理加减法 如何处理加减法呢&#xff1f; 5-128 给第一个数字前面放一个号…

UEC++ 虚幻5第三人称射击游戏(二)

UEC++ 虚幻5第三人称射击游戏(二) 派生榴弹类武器 新建一个继承自Weapon的子类作为派生榴弹类武器 将Weapon类中的Fire函数添加virtual关键字变为虚函数让榴弹类继承重写 在ProjectileWeapon中重写Fire函数,新建生成投射物的模版变量 Fire函数重写逻辑 代码//生成的投射物U…

从文本到安全图像:自动提示优化防止不当内容生成

T2I生成技术已经得到了广泛关注&#xff0c;并见证了如GLIDE、Imagen、DALL-E 2、Stable Diffusion等大型生成模型的发展。尽管这些模型能够根据文本描述生成高质量的图像&#xff0c;促进了书籍插图、品牌标识设计、游戏场景创作等多种实际应用&#xff0c;但它们也被恶意用户…

使用京东云主机搭建幻兽帕鲁游戏联机服务器全流程,0基础教程

使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程&#xff0c;非常简单&#xff0c;京东云推出幻兽帕鲁镜像系统&#xff0c;镜像直接选择幻兽帕鲁镜像即可一键自动部署&#xff0c;不需要手动操作&#xff0c;真正的新手0基础部署幻兽帕鲁&#xff0c;阿腾云整理基于京…

Python学习笔记30:进阶篇(十九)pygame的使用之显示与窗口管理

前言 基础模块的知识通过这么长时间的学习已经有所了解&#xff0c;更加深入的话需要通过完成各种项目&#xff0c;在这个过程中逐渐学习&#xff0c;成长。 我们的下一步目标是完成python crash course中的外星人入侵项目&#xff0c;这是一个2D游戏项目。在这之前&#xff…

YOLOv8改进 | 注意力机制 | 结合静态和动态上下文信息的注意力机制

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

力扣双指针算法题目:双数之和,三数之和,四数之和

目录 一&#xff1a;双数之和 1.题目&#xff1a; 2.思路解析 3.代码 二&#xff1a;三数之和 1.题目 2.思路解析 3&#xff0c;代码 三&#xff1a;四数字之和 1.题目 2.思路解析 3.代码 一&#xff1a;双数之和 1.题目&#xff1a; 输入一个递增排序的数组和一…

贵州建筑三类人员安全员2024年考试最新题库练习题

一、单选题 1.建设工程安全管理的方针是&#xff08;&#xff09;。 A.安全第一&#xff0c;预防为主&#xff0c;综合治理 B.质量第一&#xff0c;兼顾安全 C.安全至上 D.安全责任重于泰山 答案&#xff1a;A 2.安全生产管理的根本目的是&#xff08;&#xff09;。 A.…

Lunaproxy与711Proxy的对比与优劣分析

今天我们来深入对比两款在市场上备受关注的代理IP服务&#xff1a;Lunaproxy和711Proxy。接下来&#xff0c;我们将从多个角度对这两款服务进行详细分析&#xff0c;帮助大家做出明智的选择。 优势分析 711Proxy的优势 1. 性价比高&#xff1a;711Proxy提供多种灵活的套餐选…

伪元素content追加文字使用小技巧

E::before和E::after本身的作用是追加字&#xff0c;直接在文字后面追加链接 <!DOCTYPE html> <html lang"zh-cn"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

AI文本转语音,再也不用担心视频配音了.

文章目录 简介代码实现调用开通百度付费包 简介 背景 我想要将文本,转为语音,然后配上图片,这样就可以很快生成一个视频. 可以说是配音吧,我还是比较喜欢通过代码来自动化.所以今天就来实现一下,同时做一下分享和记录.目标 通过python代码,自动将文本转为配音.平台 我选择了百…

万界星空科技MES系统中的排版排产功能

在当今高度竞争的市场环境中&#xff0c;企业对于生产管理的效率和质量要求日益提高。作为智能制造的重要组成部分&#xff0c;制造执行系统&#xff08;MES&#xff09;以其强大的功能&#xff0c;在提升企业生产能力方面发挥着不可替代的作用。万界星空科技作为行业领先的智能…

MongoDB集群搭建-最简单

目录 前言 一、分片概念 二、搭建集群的步骤 总结 前言 MongoDB分片&#xff08;Sharding&#xff09;是一种水平扩展数据库的方法&#xff0c;它允许将数据分散存储在多个服务器上&#xff0c;从而提高数据库的存储容量和处理能力。分片是MongoDB为了应对大数据量和高吞吐量需…