5. 数组数据的取出
• 单个取出数据: 数组名[下标];
o 如果下标越界,会打印随机值
• 遍历
o 格式:
♣ for(int i= 0; i < 数组长度; i++) {
⎥ printf(“%d\n”, 数组名[i]);
}
6. 数组长度的问题
• 数组长度的计算:
o 格式: sizeof(数组名) / sizeof(数组元素的数据类型)
• 注意事项
o 声明数组的时候,必须指定数组的长度
o 数组的长度可以是常量,变量,表达式,字符(ACSII)
o 数组的长度不能是小数,也不能是负数
o 数组长度可以是1,也可以是0;
o 数组长度也可以是宏定义,宏值必须是个整数.
7. 数组元素的默认值与初始化
• 默认值:
o 垃圾数
• 初始化
o 先声明数组,在逐个元素赋值.
o 声明的同时,就初始化数组元素 int arr[6] = {1,3,4,5,3,4};
♣ (这时,长度就不能是变量? 因为编译的时候,编译器无法确定数组的长度.这个时候赋值就可能出现越界所以为了保证一定不会出错.就干脆这种初始化的时候不允许使用变量.而可以使用宏定义.
o 第二种初始化的时候,可以省略长度. int arr[] = {1,3,4,5,3,4};
o 只为数组前面的数组元素赋值,而其他的为0:int arr[4] = {2,4};
♣ int arr[4] = {0};
o 指定下标的初始化. int arr[4] = {[1] = 9};
8. 数组的地址
• 数组的地址 = 数组下标为0的元素地址 = 组成数组的最低字节的数组
9. 数组作为函数的参数传递
• 什么是值传递
o 当数据类型为基本数据类型时;在函数执行完毕之后,实参的值没有改变,这就是值传递
• 什么是地址传递
o 当函数的参数是一个数组的时候,那么在传递的时候,传递的是实参数组的地址.所以形参数组指针指向了实参数组,这时,形参的数组指针实际操作的就是实参数组.这就叫地址传递
• 数组作为参数传递时,会遇到一个问题
o sizeof(参数数组名) = 8个字节,如果函数的参数是一个数组,并不会开辟一个数组空间,而是声明了一个用来存储数组地址的数组指针变量,而指针变量在内存中占8个字节,在传值的时候,把实参数组名传递进来.数组名代表了数组的地址.
o
• 如何解决这个问题了?
o 让调用者将数组长度传给函数.