黑马程序员---学习笔记4:数组

七分热度_HD 2015-08-09 06:04:40
数组基本概念:把具有相同类型的若干变量按照有序的形式组织起来,这些按序排列的同类元素的集合称为数组。

按照存储类型存储:数值数组,字符数组,指针数组,结构数组
按照维度分类:一维数组,二维数组,多维数组

数组的使用流程:定义数组---->数组初始化--->使用数组

定义:类型说明符 数组名[ 常量表达式 ];
注意事项:
1)数组的长度可以是常量,也可以是常量表达式
2)数组的命名规范严格按照标识符的命名规范
3)数组不能与其他变量同名
4)数组的长度不可以是一个变量(C99个标准要求)但是Xcode有了优化,Int len=5;int a5[len];这是可以的,仅对于xcode
但是这种方法是不能直接初始化的,int a5[len]={1,2,3,4,5}; 这是错误的!!!


5)数组的长度可以使用宏定义 #define M 5 int a[M];
6)定义数组时,可以同时定义普通变量

一维数组初始化:
1)定义时初始化
(完全初始化) int a[3]={1,2,3};
(完全初始化,长度自动适应数据个数)int a[]={1,2,3};
(部分初始化)int a[3]={1,2};
(对特定下标的元素赋初值) int a4[10]={ [3]=6,[8]=10};

2)先定义,后初始化
先定义一个数组,通过下标法进行初始化

探讨:如果数组没有初始化,里面是有值的,里面是垃圾值(不确定的)

如果进行了部分初始化,数组中的其他元素也都有值了(仅限于刚刚定义阶段,如果已经定义过,然后再做的初始化,不会这样)。没初始化的元素也都被系统初始化为0了。int型初始化为0,float型初始化位0.000000.char类型初始化为ascii码0.

数组的引用(访问):数组名[下标],就可以访问数组元素
如果要逐个访问数组的元素的话,这就叫数组的遍历,可以通过for循环

数组的存储方式:
1)计算机会给数组分配一段连续的存储空间
2)数组名代表数组的首地址,从首地址开始,依次存入数组的第1个元素,第2个元素,……第n个元素
3)每个元素占用相同的字节数(实际占用几个字节,要看数据类型)
4)数组中元素之间的地址是连续的

一维数组的地址:数组名存放的是数组的首地址=数组第一个元素的地址。
数组名=&数组名[0]
数组名是一个常量,存放着数组的首地址。
数组每个元素的地址:首地址+sizeof数据类型*下标

一维数组所占字节数计算方法:sizeo(数组名);
数组长度:数组字节总长度/每个元素所占的长度

函数调用:
数组元素作为函数参数不要求形参也是函数参数,但是数组名作为函数参数时,要求形参和相对应的实参都必须是类型相同的数组。
值传递和地址传递:当用数组元素以值得方式传递给其他函数时,内存中会分配相应值新的存储空间,函数对这些值进行操作后,原数组中的值不会发生变化。但是当以地址的形式传递数组名时,函数通过地址调用的是原数组中的内容,改变的也是原数组中的内容。

数组名作为参数的注意点:
1)形参数组和实参数组的类型和长度必须一致,否则会引起错误
2)形参的数组长度和实参的数组长度可以不一致,虽不会报错,但是运行结果可能会不相符。
3)形参数组长度可以不写。
4)多维数组也可以作为函数的参数,在函数定义时对多维数组可以指定每一维的长度,也可以省去第一维的长度,但不能省去第二维,下面写法都是正确的,int a[2][3];int b[][3]
5)数组名作为函数的参数后,数组的长度信息会丢失。
在函数中使用sizeof(数组名)时,打印出的结果都是8,Xcode中所有的地址都占8个字节。
...全文
323 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,160

社区成员

发帖
与我相关
我的任务
社区描述
在CSDN学院遇到的问题反馈及对学院的改进建议等。
社区管理员
  • 软件培训社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧