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 ...
随机推荐
- ssh只读事务的管理
概念:从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据) 应用场合: 如果你一次执行单条查询语句,则没有必 ...
- hdu1863 畅通project(判定最小生成树)
畅通project Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- Android Exception 16(Error in ADT 23 Update)
http://stackoverflow.com/questions/24445367/error-in-adt-23-update http://stackoverflow.com/question ...
- MATLAB读取黑白图像显示却是黑色,24位深转8位深黑白图像解决方法
1.24位深转8位深: ps将24位深原图.png保存为GIF图256即为8位,再将8位gif图转为需要的.png,即转为8位深png图. 2.MATLAB读取黑白图像显示几乎全为黑色: 这是最近处理 ...
- 自定义ios NSLog
#ifdef DEBUG #define MyLog(FORMAT, ...) fprintf(stderr,"Time:%s\t File:%s\t Methods:%s\t Line:% ...
- Idea maven多模块项目有些加载不出来
进入View>Tool Windows>Maven projects区域,添加新的项目识别. 选择要加载项目的pom.xml文件,ok 完成.
- Unlink of file 'xx' failed. Should I try again? (y/n) 解决办法
Unlink of file 'xx' failed. Should I try again? (y/n) 原因:一般遇到这个错输入y/n都不能解决问题,出现这个问题的原因可能是其他程序正在操作git ...
- node.js 学习01
PHP开发技术栈(LAMP) Linux Apache MySql PHPnode.js 全栈开发技术栈(MEAN): MongoDB Express Angular Node.js 现阶 ...
- FPGA开发要懂得使用硬件分析仪调试——ILA
0. ILA概述在FPGA开发中,当我们写完代码,进行仿真,确定设计没有问题后,下载到硬件上一般都能按照我们的设计意愿执行相应功能.但这也并非绝对的,有时候你会遇到一些突然情况,比如时序问题或者仿真时 ...
- JBoss高危漏洞分析
前言 JBoss是一个基于J2EE的开放源代码应用服务器,代码遵循LGPL许可,可以在任何商业应用中免费使用:JBoss也是一个管理EJB的容器和服务器,支持EJB 1.1.EJB 2.0和EJB3规 ...