1. 数组初始化:
即定义时即赋值:
int a[4]={0}; //每一个位置的int都为0
int b[4]={1}; //只有第一个元素为1,其他都为0
所以要想把数组初始化为其他值,则需要一个个的指定值: int b[4]={1,2,3,4};//比如指定为1,2,3,4
或者先统一初始化为0,再利用for循环改变数组的每一个元素。
2. 数组的赋值:
在定义过后,需要给数组每一个元素赋值时,不能再像初始化那样:
a[4] = {1,3,5,7}; //这是错误的,
a={1,3,5,7};//这还是错的。
只能利用for循环,或者利用memcpy从其他内存拷贝一份值过来。
当使用完成后,局部数组会由函数自动释放,全局数组则需进行下清零。
这时候就要用到memset函数。
memset(a,0,sizeof(a));
或者memset(a,0,sizeof(int)*4); //sizeof取的是字节。 memset是按字节进行赋值的,这里为16个字节:4*4
3. memset函数:memset(void *s, int ch,size_t n); // C语言:#include <string.h> 或者 C++: #include <cstring>
一般只用来清零,或者初始化局部数组为0,以免出现局部数组的每一个元素为乱值。所以第二个参数一般为0或者-1.
要注意:
3.1 memset是按字节进行赋值,
所以假设你想利用memset给a数组每一位置为1,memset(a,1,sizeof(a)); // 这时候你去打印a的每一位,值都是16843009,而非你期望的1
原因:int为四个字节,这时候每个字节被memset置为1,而每一个元素都是一个int,即 01 01 01 01,读取十六进制为 0x01010101,十进制为 16843009
不过 char类型的可以使用memset随意赋值为自己想要的,因为 char只占一个字节,赋多少就是多少。
e.g.:
char a[3]={'a' , 'b', 'c'};
memset(a, 1,sizeof(a));
for(int i=0;i<sizeof(a)/sizeof(a[0]);i++){
printf("a[%u]=[%u]\n",i,a[i]); //得到a[1]=1; a[2]=1; a[3]=1;
}