数组总结 c++
char a [5];分别是a[0],a[1],a[2],a[3],a[4]。
char name[]=”Ray Krebbs”;
char name[11]=”Ray Krebbs”;系统将自动在字符串末尾添上结束标志’\0’。
数组初始化时,用作初始化的数组元素值放在一个大括号{}中,例如:
int a[3]={ 1, 1, l }; //含三个元素的整型数组,元素的值都是1。
int b[5]={1, 2, 3 }; //可以只给部分(本例为前3个元素)赋值。
int a[]={1, 1, l }; //全部元素都初始化时.可以不用说明元素个数
int array2[5]={0,,2,3,4}; //error不能加入“,”来跳过不赋值的元素。
int array3[5]={ }; //error语法格式错误
因此,数组的大小可用用以下公式来计算:
数组大小 = sizeof(数组名) / sizeof(数组类型)
例1 下面的代码用sizeof确定数组的大小。
//例1 用sizeof确定数组的大小
#include <iostream>
using namespace std;
void main()
{ int a[]={1,2,4,8,16};
for(int i=0; i<(sizeof(a)/sizeof(int)); i++)
cout <<a[i] <<" ";
cout <<endl;
}
运行结果为:
1 2 4 8 16
例2比较字符串数组大小和字符串长度的差别。
解:用sizeof计算数组大小,用strlen函数计算字符串长度。
//例2 字符串数组大小和字符串长度
#include <iostream>
using namespace std;
void main()
{ char ch[]="how are you";
cout <<"数组大小是: " <<sizeof(ch) <<endl;
cout <<"字符串长度是: " <<strlen("how are you") <<endl;
}
运行结果为;
数组大小是: 12
字符串长度是:11
字符串长度不考虑字符串的结束标志'\0'。
例3 输入一个字符串,输出这个字符串,以及输入字符的数目。
//例3 字符串的输入和输出
#include <iostream>
using namespace std;
void main()
{ int a=0;
char chArray[30];
cin>>chArray;
for(int i=0; chArray[i]!='\0'; i++)
{cout <<chArray[i];
a++;
}
cout <<endl;
cout<<"输入的字符数是:"<<a<<endl;
}
可以用“chArray[i]”来代替前面的终止条件,也即 for循环可以写成:
for(int i=0; chArray[i]; i++)
传递给标准库函数
C++中有一个memset()的函数,它可以一字节一字节地把整个数组设置为一个指定的值。
memset()函数在 mem.h头文件中声明,它把数组的起始地址作为其第一个参数,第二个参数是设置数组每个字节的值,第三个参数是数组的长度(字节数,不是元素个数)。其函数原型为:
void * memset(void *,int ,unsigned);
其中void*表示地址。
例4 下面的代码用数组做参数传递给标准函数memset(),以让其将数组设置成全0。
//例4 传递数组名给memset函数
#include <mem.h>
void main()
{ int array1[5];
int array2[50];
memset(array1,0 ,5*sizeof(int));
memset(array2,0 ,50*sizeof(int));
}
如果以这样的方式声明数组
int a[256]={0};
则数组内全部数字自动初始化为0,即一开始数组内所有元素的值为0
如果这样声明
int a[256];
则数组没有初始化,则开始时数组内的数字可以是任意值。
memset是对每个字节赋值,而int有4字节(32位)
比如这样,memset(a,1,sizeof(a));
则a中的每个元素都被赋值成为2进制数为,00000001000000010000000100000001,的数
转换成10进制就是16843009
所以,一般用memset对数组赋0或-1,赋其他的值就要用循环来实现。
二维数组的下标
[0][0] [0][1] [0][2]
[1][0] [1][1] [1][2]
[2][0] [2][1] [2][2]
[3][0] [0][1] [0][2]
多维数组按行存储。考虑一个4×4的表格,图5.4所示为这个表的直观映象,二维表内存映象依然是顺序的存储。C++按行把多维数组映射到线性内存。
二维表的内存映象