组中。数组(array)就是数值的集合。例如,假设要保存一个整型数组,放五个整型值。可以声明数组如下:int
myArray[5];这里编译器为数组分配图1.7所示的内存空间。由于每个int要4个字节存储,所以整个数组占用20字节的内存空间。 mArray[0]mArray[1]mArray[2]mArray[3] mArray[4] baseAddrbasseAddr+4baseAddr+8 baseAddr+12baseAddr+16 声明数组后,就可以用如下脚标操作符([])填入数值: myArray[0] = -200; myArray[1] = -100; myArray[2] = 0; myArray[3] = 100; myArray[4] = 200; 由上可见,C++(www.cppentry.com)中的数组是以0为基数的。后面程序中可以用脚标操作符访问数组的各个元素: int result=myarray[3]+myArray[4]; // result will be 300 还有一次声明和填入整个数组内容的简捷方法如下: int myArray[5] = {-200, -100,0,100,200}; 进
一步说,如果知道数组的元素个数,并在声明数组时填充数组,则声明数组时连数组长度都可以省略。例如:int myArray[] = {-200,
-100,0,100,200 };这是可行的,因为编译器从赋予的数值表可以判断出数组中元素的个数和分配给数组的内存空间。 数组可以是多维的。为了生成两维整型数组,可用下列代码: int mdArray[3][5]; 这样就分配15个int空间(共60字节)。数组的元素可以和一维数组一样访问,只是要提供两个脚标操作符:int x = mdArray[1][1]+mdArray[2][1]; 图1.8两维数组在内存中的样子警告 注意不要重载数组末尾。 C++(www.cppentry.com)
一个强大的特性是能直接访问内存。由于这个特性,C++(www.cppentry.com)无法阻止你写入特定内存地址,即使这个地址是程序不让访问的。下列代码是合法的,但会导致程序或
Windows崩溃:int
array[5];array[5]=10;这是常见的错误,因为数组是以0为基数的,最大脚标应是4而不是5。如果重载数组末尾,则无法知道哪个内存被
改写了,使结果难以预料,甚至会导致程序或Windows崩溃。这类问题很难诊断,因为受影响的内存通常要在很久以后才访问,这时才发生崩溃(让你莫名其
中之妙)。所以写入数组时一定要小心。 数组规则 ·数组是以0为基数。数组中的第一个元素为0,第二个元素为1,第三个元素为2,等等。 ·数组长度应为编译常量。编译器在编译时必须知道为数组分配多少内存空间。不能用变量指定数组长度。所以下列代码不合法,会导致编译错误: int x = 10;int myArray[x]; // compiler error here· 小心不要重载数组末尾。 · 大数组从堆叠(heap)而不是堆栈(stack)中分配(详见稍后)。· 从堆叠分配的数组可以用变量指定数组长度。例如:int x = 10;int* myArray = new int[x]; // this is OK 字符数组 奇怪的是,C++(www.cppentry.com)不支持字串变量(放置文本的变量),C++(www.cppentry.com)程序中的字串是用char数据类型的数组表示的。例如,可以将变量赋予char数组如下: char text[] = "This is a string."; 这就在内存中分配18字节的内存空间用于存放字串。根据你的领悟能力,也许你会发现该字串中只有17个字符。分配18个字节的原因是字串要以终止null结尾,C++(www.cppentry.com)在分配内存空间时把终止null算作一个字符。 新术语 终止null是个特殊字符,用|0表示,等于数值0。程序遇到字符数组中的0时,表示已经到字串末尾。为了说明这点,输入并运行下列控制台应用程序。 清单1.6Nulltest.cpp 1: #include <iostream.h> 2: #include <conio.h> 3: #pragma hdrstop 4: 5: int main(int argc,char **argv) 6: { 7:char str[]="This is a string."; 8.cout << str << end1; 9.str[7]= '\0'; 10. cout << str << end1 11. cout << end1 << "Press any key to continue..."; 12: getch(); 13: return 0; 14: } 分
析 最初,字符数组包含字符串This is a
string和一个终止null,这个字串通过cout送到屏幕上。下一行将数组的第7个元素赋值为|0,即终止null。字串再次发送到屏幕上,但这时
只显示This
is。原因是计算机认为数组中字串在第7个元素上终止,余下字串仍然在内存空 |