数组的创建
int a[100]
静态数组
int array[100] = {4,5}; //定义数组array,并初始化前两个元素为4,5,后面剩余元素初始化为0
C++动态数组初始
!!!!动态数组初始化单独研究!!!!
动态 int (*array)[n] = new int[m][n]; delete []array; //默认初始化为0;
动态 int *array = new int[m]; for(i) array[i] = new int[n]; for(i) delete []array[i]; delete []array; //多次析构,默认初始化为0;
动态 int *array = new int[m][n]; delete []array; //数组按行存储,默认初始化为0
int a[10];
char a[10];
memset
只能对char[],操作,批量替换相同字符
memset(a,0,sizeof(a)); //将每个元素设置为0
memset(a,1,sizeof(a)); //将每个元素设置为1
memset(a,'a',sizeof(a)); //将每个元素设置为a,‘a’ = 97 (ASCII码)
也就是说第二个元素要在ASCII码范围内(0~127)。
memset(a,0,sizeof(a)); //将每个字节设置为0,此时每个int元素正好也为0
memset(a,1,sizeof(a)); //将每个字节设置为1,此时每个int元素为16843009 = 0x1010101
// 0x1010101 = 1000000010000000100000001(二进制)
memset()的功能是对str的每一个字节进行ASCII赋值,int占四个字节,
所以对int数组进行非0赋值或初始化时不能用memset()函数,只能循环处理/定义时初始化;
如果使用memset初始化int数组,初始值只能设为0或-1
#include<stdio.h>
#include<string.h>
int main(){
int i=0;
int a[10];
memset(a,-1,sizeof(a));//全部替换为-1
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
memset(a,0,sizeof(a));//全部替换为0
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
//也不错啦
或者说for循环初始化,先声明。
#include<stdio.h>
int main(){
int i=0;
int a[10];
for(i=0;i<10;i++)
a[i]=i;
黄金总结,来源:http://t.csdnimg.cn/cP6da
初始化参数列表:最常用的方法之一,尤其是初始化为0时非常方便。初始化速度较快;但是当需要把一个很长的数组初始化为非零值时比较麻烦。
使用memset函数进行初始化:适合于char类型数组的初始化,速度较快;缺点是memset不适合初始化char类型以外的数组。
指定初始化器:使用方便,初始化速度较快;缺点是很多编译器不支持该特性,并且C++的语法也不允许使用指定初始化器,可移植性较差。
for循环初始化:缺点是速度较慢;但是for循环的移植性较好,几乎适用于所有类型数组的初始化(可以考虑和初始化参数列表int a[10]={0}配合使用,并且release版本的for循环初始化经优化后速度并不慢)