本文共 1697 字,大约阅读时间需要 5 分钟。
1.3 数组
1.?数组的定义
数组是相同类型数据的集合。引入数组就不需要在程序中定义大量的变量,大大减少程序中变量的数量,使程序精炼,而且数组含义清楚,使用方便,明确地反映了数据间的联系。许多好的算法都与数组有关。熟练地利用数组,可以大大地提高编程的效率,加强程序的可读性。例1.5展示了数组的使用方法。
【例1.5】 一维数组与二维数组使用举例。
#include<iostream>
using namespace std;
int main(){
int a[10]={1,2,3,4,5,6,7,8,9,10};
// 数组a,类型为int整型,有10个元素,是一个一维数组
int i,j;
for(i=0;i<10;i++){ // 从a[0]~a[9]
cout<<a[i]<<" ";
}
cout<<endl;
int b[2][2]={1,2,3,4}; // 数组b,类型为int,有4 元素,是一个二维数组
for(i=0;i<2;i++){
for(j=0;j<2;j++){
cout<<b[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
程序的执行结果是:
1 2 3 4 5 6 7 8 9
1 2
3 4
例1.5中数组a是一个一维数组,有一个下标;数组b是一个二维数组,有两个下标。
一个数组在内存中占用的存储单元是连续的,也就是说一个数组在内存中占用一片连续的存储单元。在32位的机器上,一个int类型的值占4Byte,如果a[0]的地址是2000,那么a[1]的地址就是2004,a[2]的地址就是2008,a[3]的地址就是2012……如此类推。这里的“地址”,大家可以简单理解为在内存中的一个标识,详细内容会在本章的1.4节中进行介绍。
2.?字符数组
字符数组,就是一个用来存放字符数据的数组,示例如下:
char str[10]="Book";
其中,str就是一个字符数组,并且str[0]='B',str[1]='o',str[2]='o',str[3]='k'。C++中用'\0'来标识一个字符串的结束,这里,str[4]~str[9]都是'\0'。通常用strlen()函数来计算一个字符串的长度,故strlen(str)的值是4。与strlen()函数比较容易混淆的是sizeof()函数,这里sizeof(str)的值是10。
strlen与sizeof的区别如下所示:
(1)strlen()是函数,在运行时才能计算。参数必须是字符型指针(char*),且必须是以'\0'结尾的。当数组名作为参数传入时,实际上数组已经退化为指针了。它的功能是返回字符串的长度。
(2)sizeof()是运算符,而不是一个函数,在编译时就计算好了,用于计算数据空间的字节数。因此,sizeof不能用来返回动态分配的内存空间的大小。sizeof常用于返回类型和静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
当参数分别如下时,sizeof返回的值表示的含义如下所述。
1)数组——编译时分配的数组空间大小,如:
char a[10]="hello";
因为char占1Byte,所以sizeof(a)的值是10*1=10Byte。
2)指针——存储该指针所用的空间大小,如:
char *str="I am from China."
因为str存储的是一个字符指针,所以sizeof(str)是指针所占的空间,即是4Byte。
3)类型——该类型所占的空间大小,如:
int b=10;
因为在32位的机器上,int类型占4Byte,所以sizeof(b)的值是4Byte。
4)对象——对象的实际占用空间大小,如:
class Class_Sample{
int a,b;
int func();
}Class_a;
两个int类型的值是8Byte,所以sizeof(Class_a)的值是8Byte。
5)函数——函数的返回类型所占的空间大小,且函数的返回类型不能是void。
转载地址:http://xyzso.baihongyu.com/