C语言-数组篇
C语言数组
一、数组的概念
用来存储一组数据的构造数据类型
特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素。
二、数组的定义
格式: 类型 数组名[元素个数];
举例:存储5个人的年龄
Int agrs[5]; //在内存中开辟4x5=20个字节的存储空间
可以在定义数组的同时对数组进行初始化:
Int ages[5]={17,18,19,20,21};
遍历数组:
For(int i=0;i<5;i++)
{
Printf(“ages[%d]=%d\n”,i,ages[i]);
}
注意:
(1)数组的初始化
①. Int ages[5]={17,18,19,20,21};//一般写法
②. Int ages[5]={17,18};//只对前两个元素赋值
③. Int ages[5]={[3]=10,[4]=11};//对指定的元素赋值,这里为第三个和第四个
④. Int ages[]={11,12,13}.//正确,右边的元素确定,则个数可以省略这里为3个。
⑤. Int ages[];//错误,编译器无法知道应该分配多少的存储空间
⑥. Int ages[5];ages={17,18,19,20,21};//错误,只能在定义数组时这样进行初始化
⑦. Int ages[‘A’]={1,2,3};//正确,相当于是ages[65]
⑧. Int count=5;int ages[count];//如果不进行初始化,则这种写法正确,编译器不会报错为其分配20个字节的存储空间,ages[0]=1;ages[1]=2;可以像这样对数组的元素进行赋值,但是2,3,4等元素的值时不确定的。
⑨. 而int count=5;int ages[count]={1,2,3,4,5};//这种写法是错误的,在定义数组时对数组进行初始化,元素的个数必须为常量或者不写,不能是一个变量
(2)计算数组元素
当没有表明数组元素个数时,如何对其进行遍历(要求使用数组元素个数)?
可以使用sizeof运算符来计算数组元素的个数
Int count=sizeof(ages)/sizeof(int); //数组的总长度除以单个的长度等于元素个数
三、数组内存存储细节
假设有数组如下:
Int x[]={1,2};
Char ca[5]={‘a’,‘A’,‘B’,‘C’,‘D’};
数组名即代表数组的地址,数组的地址==数组名(ca)==数组的首元素的地址&ca[0]
在内存中,内存从大到小进行寻址,为数组分配了存储空间后,数组的元素自然的从上往下排列存储,整个数组的地址为首元素的地址。
模拟该数组的内存存储细节如下:

注意:字符在内存中是以对应ASCII值的二进制形式存储的,而非上表的形式。
在这个例子中,数组x的地址为它的首元素的地址0x08,数组ca的地址为0x03。
四、数组-传址调用
Void change(int array[]) //数组可以作为函数的形参,可以省略数组元素的个数
{
Array[0]=100;
}
Void change2(int a) //基本类型作为函数的形参
{
a=200;
}
Int main()
{
Int ages[5]={1,2,3,4,5};
Change2(ages[0]);
Change(ages);
Return 0;
}
Array数组与ages数组的地址一致,若以数组作为函数的参数,这种传递方式是传址调用,传递的是整个数组的地址,修改形参数组元素的值,就是修改实参的值。
当你把一个数组当做参数来传递时,它会看做是一个指针,在该函数体内使用sizeof运算符来计算数组的长度,得出的数值永远为8,而非数组的实际长度,因为任何类型的指针都占8个字节的存储空间。
提示:数组作为一个函数的参数时,如果函数体涉及到数组遍历等操作,通常把数组的实际元素个数也作为参数传递给函数。
如 void maxofarray(int array[],sizeof(ages)/sizeof(int)){....}
五、二维数组
Int ages[50];//数组能够存放50个int类型的数据
Int ages1[3][10];//数组能够存放3个数组,每个数组存放10个数值,共3x10=30个述职数值。
一个二维数组a,a包括两个一维数组a[0]和a[1],每个一维数组都包括三个元素。
使用场合:五子棋,俄罗斯方块等,
假设:
char Y[3][2]={
{‘A’,‘B’},
{‘C,‘D’},
{‘E,‘F’}
};
内存情况:

C语言-数组篇的更多相关文章
- C语言数组篇(五)多级指针和二维数组指针的区别
多级指针 以二级指针为例 二级指针的由来是 指针数组 的指针形式. int *p[10] 读取的顺序是 p[] --> 10个空间的数组 * p[] --> 这10个空间的数组里面存放 ...
- C语言数组篇(四)二维数组
二维数组声明: ][] ={{,,},{,,}; //两行 三列 二维数组在声明的时候可以不写行,但一定要写列 ] = {{,},{,,},{}}; //未声明的地方自动补零 二维 ...
- C语言数组篇(三)字符空间 和 非字符空间
一维数组和字符串 首先是字符数组(区别字符串) ] = {'a','b','c'}; //这只是单纯的字符数组,不是字符串 字符串最重要的标志就是结尾有一个'\0' ...
- C语言数组篇(二)指针数组和数组指针
数组指针 和 指针数组 这两个名词可以说是经常搞混了 数组指针--> 数组的指针 就是前面讲的 指向数组a的指针p; 指针数组--&g ...
- C语言数组篇(一)一维数组
0. 数组的两种表现形式 一种是常见的a[10]; //初学者常用 另一种是用指针表示的数组. //实际工程使用.常用于参数传递 ...
- C语言数组
在C语言中,对于三维或三维以上数组的使用并没有很好的支持,而且使用率也非常的低,后面会对三维数组做一些简单的分析,这篇文章主要以二维数组来探讨一些C语言中数组使用的相关概念和技巧. 1 一个var[i ...
- PHP学习笔记之数组篇
摘要:其实PHP中的数组和JavaScript中的数组很相似,就是一系列键值对的集合.... 转载请注明来源:PHP学习笔记之数组篇 一.如何定义数组:在PHP中创建数组主要有两种方式,下面就让我 ...
- GO语言数组和切片实例详解
本文实例讲述了GO语言数组和切片的用法.分享给大家供大家参考.具体分析如下: 一.数组 与其他大多数语言类似,Go语言的数组也是一个元素类型相同的定长的序列. (1)数组的创建. 数组有3种创建方式: ...
- C语言 数组 列优先 实现
C语言数组结构列优先顺序存储的实现 (GCC编译). 从行优先转换为列优先存储方式, 与行优先相比, 不同之处在于改变了数组维界基址的先后顺序, 从而改变了映像函数常量基址. /** * @brief ...
随机推荐
- redis源代码分析(5)——aof
前面几篇基本介绍了redis的主要功能.流程.接下来是一些相对独立的部分,首先看一下持久化. redis持久化支持两种方式:RDB和AOF,我们首先看一下AOF的实现. AOF(Append only ...
- SSH框架阶段 ——SSH的优缺点,使用场景?
Hibernate优点: (1) 对象/关系数据库映射(ORM)它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全的面向对象思想(2) 透明持久化(persistent)带有持久化状 ...
- JSON——Java中的使用
1. 构建JSON方法(数据——>JSON) 这里使用Maven构建项目 在pom.xml中添加如下依赖 <dependency> <groupId>org.json&l ...
- StandardServer.await: create[8005]java.net.BindException: Address already in use: JVM_Bind错误
StandardServer.await: create[8005]java.net.BindException: Address already in use: JVM_Bind错误. 原因是:To ...
- SqlServer+Topshelf+Quartznet做集群,定时任务分布式处理
接触Quartznet之前,老东家用的是总监自己写的分布式任务框架,好用但是配置麻烦,unity,一个微软容器,配置节点错一个,整个使用到unity文件的项目全部跑不起来,这后果真的受不了... 目前 ...
- VS2017、netcore版本更新升级
VS2017 剩下的就是下一步了. netcore 访问:https://www.microsoft.com/net/download/archives 找到对应版本(最新版本) 下载安装就可以了 装 ...
- 【web开发学习笔记】Structs2 Result学习笔记(一)简介
Structs2 Result学习笔记(一)简介 问题一 <struts> <constant name="struts.devMode" value=" ...
- Django中API分析
下面,我将仔细分析一次请求的旅程: web端发出一个请求报文,到获得服务器的响应报文结束. 1.打开浏览器,输入URL,进入API页面: http://127.0.0.1:8000/api/salt ...
- linq基础,正则表达式,.net相关
声明扩展方法的步骤:类必须是static,方法是static,第一个参数是被扩展的对象,前面标注this.使用扩展方法的时候必须保证扩展方法类已经在当前代码中using. LINQ:将int数组中大 ...
- PyTorch在64位Windows下的Conda包(转载)
PyTorch在64位Windows下的Conda包 昨天发了一篇PyTorch在64位Windows下的编译过程的文章,有朋友觉得能不能发个包,这样就不用折腾了.于是,这个包就诞生了.感谢@晴天14 ...