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); //运算结果:55
    sum = mySum((int[][5]) { {1, 2, 3, 4, 5}, { 6, 7, 8, 9, 10 } }, 2);
            //将数组字面量直接及第一维成员数直接传入函数,注意(int[][5])中无数组名,只剩类型
    printf("%d\n", sum);//运算结果:55
    getchar();
	return 0;
}    

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用python画蜡笔小新

代码地址: https://pan.quark.cn/s/6ae646d2fef3

Java知识点大纲

文章目录 第一阶段&#xff1a;JavaSE1、面向对象编程(基础)1)面向过程和面向对象区别2)类和对象的概述3)类的属性和方法4)创建对象内存分析5)构造方法(Construtor)及其重载6)对象类型的参数传递7)this关键字详解8)static关键字详解9)局部代码块、构造代码块和静态代码块10)pac…

mac中如何恢复因为破解脚本导致的IDEA无法启动的问题

问题 为了在mac中安装免费的2024版idea&#xff0c;导致下载了一个脚本&#xff0c;使用这个脚本后&#xff0c;但是发现idea还没有破解&#xff0c;相反导致idea无法启动&#xff0c;每次点击&#xff0c;都会弹出“cannot start IDE…” 问题排查 在访达中点击mac的应用程…

营销故事之扩大牙膏开口

职场营销故事“扩大牙膏开口”又可以说是“牙膏开口扩大1毫米”&#xff0c;为十大经典营销故事之一。某品牌的牙膏&#xff0c;包装精美&#xff0c;品质优良&#xff0c;备受顾客喜爱&#xff0c;连续10年营业额保持10%-20%的增幅。可到了第11年&#xff0c;销售业绩却停滞不…

MySQL环境搭配

下载版本37滴 下载第二个 之后进行安装 进入安装界面 next 选择默认的 进行下一步 安装成功后&#xff0c;进行一系列配置&#xff0c;成功界面如下&#xff1a; 配置 MySQL8.0 环境变量 如果不配置 MySQL 环境变量&#xff0c;就不能在命令行直接输入 MySQL 登录命令。 步…

PowerDsigner的简单使用

目录 1.PowerDesinger 2.PD与navicat的区别&#xff1a; 3.使用 1.PowerDesinger 在实际开发中&#xff0c;数据库的设计会使用专业的建模工具——PowerDesinger &#xff08;安装及其破解大家搜选相关CSDN博客吧&#xff09; 2.PD与navicat的区别&#xff1a; navicat是…

电阻式无功负载组(即电阻式感性负载组)

RL系列电阻式无功负载组&#xff08;即电阻式感性负载组&#xff09;可以通过设置特定功率因数&#xff08;pf&#xff09;来模拟电力系统中的电机负载和电磁器件以及纯阻性负载。电阻式无功负载组是需要额定kVA、额定功率因数和额定电流测试的关键任务备用应急电源系统定期进行…

Mybatis-01 原理

一. JDBC式编程 在 jdbc 编程中&#xff0c;我们最常用的是 PreparedStatement 式的编程&#xff0c;我们看下面这个例子&#xff1b; Connection conn null; PreparedStatement ps null; ResultSet rs null;try {// 1. 注册驱动Class.forName("com.mysql.jdbc.Drive…

UE5 01-给子弹一个跟角色一致的向前的方向的冲量

默认Pawn 负责角色位置, 默认PlayerController 负责记录角色相机旋转

Vant Design - VUE 时间区间限制

效果图&#xff0c;限制7天 实现代码 <a-range-picker v-model"dateTime" style"width: 100%" :disabled-date"disabledDate" format"YYYY-MM-DD HH:mm:ss" :showTime"true" :placeholder"[开始时间, 结束时间]&quo…

图像增强 目标检测 仿射变换 图像处理 扭曲图像

1.背景 在目标检测中&#xff0c;需要进行图像增强。这里的代码模拟了旋转、扭曲图像的功能&#xff0c;并且在扭曲的时候&#xff0c;能够同时把标注的结果也进行扭曲。 这里忽略了读取xml的过程&#xff0c;假设图像IMG存在对应的标注框&#xff0c;且坐标为左上、右下两个…

黑龙江等保测评知多少

黑龙江的等保测评&#xff0c;即网络安全等级保护测评&#xff0c;是指在中国黑龙江地区针对信息系统的安全性进行的一系列评估活动&#xff0c;确保这些系统符合国家规定的安全等级标准。这个过程涉及到多个阶段&#xff0c;旨在提升信息系统整体的安全水平。 以下是黑龙江等…

程序包lombok不存在,解决办法。

当前方法是针对于代码没有报错&#xff0c;本身有lombok jar包的情况 1.找到本地maven仓库中的已经下载好的lombok包&#xff0c;删掉。 2. 直接刷新maven&#xff0c;会重新下载lombok jar包&#xff0c;此时再启动项目时就可以正常运行了。

第四届数字安全大会:AI时代数据安全策略与天空卫士创新实践

2024年6月22日&#xff0c;以 “新质•真能力”为主题的第四届数字安全大会在北京隆重召开。这场由数世咨询和CIO时代联合主办的行业盛会&#xff0c;集中探讨了大模型、数据治理与流通、以及安全运营等当前最前沿的议题。大会吸引了来自不同行业的首席信息官&#xff08;CIO&a…

和闺蜜的泰国之旅

每当我回想起那次和闺蜜丽丽&#xff08;全名罗莉&#xff09;的泰国之旅&#xff0c;心中总是涌起复杂的情绪。那段经历仿佛一场噩梦&#xff0c;至今仍无法从脑海中挥去。 我们满怀期待地抵达曼谷&#xff0c;热带的阳光、繁忙的街道、美味的街头小吃&#xff0c;都让我们兴…

用例子和代码了解词嵌入和位置编码

1.嵌入&#xff08;Input Embedding&#xff09; 让我用一个更具体的例子来解释输入嵌入&#xff08;Input Embedding&#xff09;。 背景 假设我们有一个非常小的词汇表&#xff0c;其中包含以下 5 个词&#xff1a; "I""love""machine"&qu…

【后端面试题】【中间件】【NoSQL】MongoDB提高可用性的方案(主从结构、仲裁节点、分片、写入语义)

主从结构 MongoDB的高可用和别的中间件的高可用方案基本类似。比如在MySQL里&#xff0c;接触了分库分表和主从同步&#xff1b;在Redis里&#xff0c;Redis也有主从结构&#xff1b;在Kafka里&#xff0c;分区也是有主从结构的。 所以先介绍启用了主从同步 我们的系统有一个关…

使用ChatGPT自动生成测试用例思维导图

使用ChatGPT自动生成测试用例思维导图 引言ChatGPT在测试用例编写中的应用全面覆盖测试场景边界测试避免测试用例重复 借助ChatGPT生成测试用例思维导图准备工作步骤一&#xff1a;与ChatGPT对话步骤二&#xff1a;生成思维导图代码 结语 引言 在编写测试用例时&#xff0c;测…

物联网应用Fast ingest

一、原文路径 Tuning the System Global Area 二、翻译 1、原理 Fast ingest 优化是针对高并发&#xff0c;单行数据的插入这种场景的。比如IOT应用采集&#xff08;很符合国网的用采数据场景&#xff09;。 Fast ingest 使用MEMOPTIMIZE_WRITE 提示来插入数据到 MEMOPTIM…

WordPress付费进群V2主题,多种引流方法,引私域二次变现

全新前端UI界面&#xff0c;多种前端交互特效让页面不再单调&#xff0c;进群页面群成员数&#xff0c;群成员头像名称&#xff0c;每次刷新页面随机更新不重复&#xff0c;最下面评论和点赞也是如此随机刷新不重复 进群页面简介&#xff0c;群聊名称&#xff0c;群内展示&…