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

来源:互联网 发布:大数据工程师压力大吗 编辑:程序博客网 时间:2024/05/22 06:20

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-


数组基本概念:把具有相同类型的若干变量按照有序的形式组织起来,这些按序排列的同类元素的集合称为数组。

 

按照存储类型存储:数值数组,字符数组,指针数组,结构数组

按照维度分类:一维数组,二维数组,多维数组

 

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

 

定义:类型说明符  数组名[ 常量表达式 ];

注意事项:

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}; 

(完全初始化,长度自动适应数据个数)inta[]={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个字节。


0 0
原创粉丝点击