图 数组在内存中 定义数组就是定义了一块连续的空间,空间的 大小等于元素数*每个元素所占的空间大小。 数组元素按序存放在这块空间中。 司 LoCcS
数组在内存中 定义数组就是定义了一块连续的空间,空间的 大小等于元素数*每个元素所占的空间大小。 数组元素按序存放在这块空间中
图 为数组分配空间 如:int intarray[5];占用了20个字节,因 为每个整型数占四个字节。如给intarray[3] 赋值为3,如果这块空间的起始地址为100,那 么在内存中的情况是: 随机值 随机值 随机值 3 随机值 100 104 108 112 116 103 107 111 115 119 当你引用变量intarray[idx]时,系统计算它 的地址100+ⅰdx*4,对该地址的内容进行操作。 LoCcS
为数组分配空间 如: int intarray[5];占用了20个字节,因 为每个整型数占四个字节。如给intarray[3] 赋值为3,如果这块空间的起始地址为100,那 么在内存中的情况是: 当你引用变量intarray[idx]时,系统计算它 的地址100+idx*4,对该地址的内容进行操作。 随机值 随机值 随机值 3 随机值 100 103 104 107 108 111 112 115 116 119
图 数组下标超界问题 C/C+语言不检查数组下标的超界。如定义数 组int intarray[10];合法的下标范围是0- 9,但如果你引用intarray[10],系统不会报 错。如数组intarray的起始地址是1000,当 引用intarray[10]时,系统对1040号内存进行 操作。而1040可能是另一个变量的地址 解决方法:由程序员自己控制。在对下标变量 进行操作前,先检查下标的合法性。 司 LoCcS
数组下标超界问题 C/C++语言不检查数组下标的超界。如定义数 组 int intarray[10]; 合法的下标范围是0 – 9,但如果你引用intarray[10],系统不会报 错。如数组intarray 的起始地址是1000,当 引用intarray[10]时,系统对1040号内存进行 操作。而1040可能是另一个变量的地址 解决方法:由程序员自己控制。在对下标变量 进行操作前,先检查下标的合法性
数组的操作 数组的操作主要是数组元素的操作。 © 不能直接对数组名进行赋值。如:intarray=30 是错的。事实上,数组名中存放的是该数组的起 始地址。 eg.数组的输入输出 int mainO) int intarray 10],idx; for (idx 0;idx <=9;++idx)cin >intarray idx]; cout <endl; for idx 0;idx <=9;++idx)cout <intarray[idx]; 3 LoCcS
数组的操作 数组的操作主要是数组元素的操作。 不能直接对数组名进行赋值。如:intarray=30 是错的。事实上,数组名中存放的是该数组的起 始地址。 eg. 数组的输入输出 int main() {int intarray[10], idx; for (idx = 0; idx <= 9; ++idx) cin >> intarray[idx] ; cout << endl; for ( idx = 0; idx <= 9; ++idx) cout << intarray[idx]; }
数组应用 ©从终端输入一串字符,统计字符串中个字母出现的 次数。 ©解决方法: ·方法一:用26个整型变量计数26个字母,对输入字符串中 的每一字符用switch语句分别计数。 ·方法二:用一个26个元素的数组,如num[26],表示计数。 num[0]存放a的个数,num[1]存放b的个数..。这样对每一 个字符不必用switch,而只需用一个简单的计算: ++num[toupper (ch)-'A']; 就可以了。 LoCcS
数组应用 从终端输入一串字符,统计字符串中个字母出现的 次数。 解决方法: • 方法一:用26个整型变量计数26个字母,对输入字符串中 的每一字符用switch语句分别计数。 • 方法二:用一个26个元素的数组,如num[26], 表示计数。 num[0]存放a的个数, num[1]存放b的个数…。这样对每一 个字符不必用switch,而只需用一个简单的计算: ++num[toupper(ch) - ’A’]; 就可以了