您的位置:首页 > 编程语言 > C语言/C++

黑马程序员———C语言———【一维数组】

2015-08-11 18:42 447 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------

一、定义变量时的地址分配

例:3的二进制是 [高位] 00000000000000000000000000000011 [低位]

0、一个内存单元是一个字节。每个内存单元都有唯一的一个地址。

1、先定义的变量分配的是高地址,后定义的变量分配的是低地址。(在内存中,高地址在下面,低地址在上面)

2、低位字节存在低地址,高位字节存在高地址。

3、变量的地址:变量的首地址(变量在内存中占用的存储单元中地址最小的那个地址)

案例:



二、char类型数据存储问题



首先,变量a是以ascii码值的形式存储在内存单元中的。

len2的值:先找到'a'的ascii吗值,97。把97按照int类型进行二进制转换。

97的二进制数据为:00000000 00000000 00000000 01100001

综上,他存储的是4个字节。

len1的值:先找到'a'的ascii吗值,97。把97按照int类型进行二进制转换。

因为ch是char类型数据,只占一个字节,所以只存储一个字节的内存地址,即01100001

综上,他存储的是1个字节。

总结:char类型的常量和变量存储方式是不一样的。

延伸:因为字符是以ascii码的形式存储,所以A和a的ascii码值是不相同的。所以可以在大小写之间切换。大小写相差值为32



三、一维数组

0、数组:相同类型的若干个数据组成一个有序的集合。

1、概念:如果一个数组的所有元素都不是数组,那么这个数组就是一维数组。

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

3、注意事项:

(1)数组的长度可以是一个常量,也可以是常量表达式

(2)数组名的命名规则:严格按照标识符的命名规则

(3)数组名不能和其他变量同名

(4)数组的长度不可以为一个变量(C99标准要求的)

(5)数组的长度可以使用宏定义

(6)定义数组的时候还可以定义普通变量

4、初始化

(1)定义的同时初始化

1)完全初始化

形式1:int num[4]={12,3,4};

形式2:int num[]={1,2,3,4}

2)部分初始化

形式1:int num[4]={1,2};

没初始化的元素值为0.

形式2:int num[10]={[3]=8,[4]=123};

没初始化的元素值为0.

(2)先定义,后初始化

int num[4];

num[4]={12,3,4,5};

5、(1)如果数组没有被初始化,那么数组中到底有没有值?有是多少?

有值,垃圾值。

(2)如果数组部分初始化,那么数组中没有被初始化的元素有没有值?有是多少?

有值。

如果是int类型的数租,那么剩余元素的值为0.

如果是float类型的数组,那么剩余元素的值为0.000000

如果是char类型的数组,那么剩余元素的值的ascii码的值为0

特别强调:使用先定义后初始化的方式,如果部分元素被初始化了,系统不会对没有初始化的那部分元素赋值为0

6、遍历数组



7、存储方式

数组的首地址:数组的第一个元素首地址(第一个元素的第一个字节地址)。

先存入的元素处于低地址,后存入的与元素处于高地址。

数组名是一个常量,它存储的是数组的首地址。

8、长度计算方法

数组长度=数组占用的总字节数/数组元素占用的字节数

9、一维数组越界问题

数组越界即使没有报错,也是不安全的,因为数据有可能会丢失,这个空间不属于你。

10、案例:输入10个数字,并输出10个数字中最大的数



11、数组元素作为函数参数



12、数组作为函数参数



需要注意的是:

用数组名作为函数参数,传递的是地址

实参是数组名numbers,形参是nums

此时,numbers和nums在内存中代表了同一块内存空间

13、数组名作为函数参数需要注意的点

1、形参数组的类型和长度要和实参一致,如果类型不一致,会造成错误。

2、实参的类型和形参的类型不匹配

3、形参的数组的长度和实参的长度可以不一致,随不会报错,单运行的结果和实际不相符

4、形参数组的数组长度可以不写

5、数组作为实参传递到被调函数中,被调函数的形参数组的长度为8.因为传递的是地址,所有类型的地址都占8个字节
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: