三、数组的访问越界和传递
00 分钟
2023-8-10
2023-9-15
type
status
date
slug
summary
tags
category
icon
password
在C语言中,定义数组必须是一个固定的长度,不能使用变量作为长度值,如:

1、数组的访问越界

在Java语言中,一个数组如果访问越界时,会报出ArrayIndexOutOfBoundsException的异常,在代码运行时我们可以很容易的发现错误在什么地方。而在C语言中,数组访问越界是没有任何报错的,他也不会进行代码检查。他有时是一个很正常的值,对代码的运行没有影响,有时程序就直接崩溃了。
例如:
输出结果是未知的,至于为什么是未知的,这是因为在获取数组其中一个元素时,我们先获取的是这个元素的地址值,然后根据地址去查找数据。如上代码,数组中长度是五,但是当我访问第六个(下标值为5)元素时,他会访问数组所在的地址的下一个地址空间(内存空间),获取到数据。有点像char输入时遇到的问题。假设内存图如下:
前面五个是数组的所有元素,当访问越界时,就会访问到数组地址空间(内存空间)之后的空间,也就是上述代码中的a[4]后面的地址00 00 00 00
所以,在编写C语言时,应该尽量避免会造成数组访问越界的写法。

2、数组的传递

在Java语言中,一个数组的传递,传递的是这个数组的地址值。而在C语言中,数组在传递时,传递的是指针,这样就会有一个问题,在获取数组长度时,获取不到真实的数组长度,而是获取的指针的大小。例如:
输出的结果是 8 ,而不是 20,因为指针的大小是 8 个字节所以我们在传递数组时,需要把数组的长度提前获取到,再和数组一起传递到下一个方法中。例如:
这样就能在被传递方法中获取到数组长度了。

3、字符数组的使用

字符数组相对整形数组来说,多了一个使用方式。那就是将其作为字符串使用,如下四字符数组的使用:
四、字符数组(字符串)的使用
上一篇
四、字符数组(字符串)的使用
下一篇
二、数据的输入输出(打印)

评论
Loading...