数组初始化总结

整型数组

初始化数组为0:
1.静态变量和全局变量初始化时会自动设为0。

#include<stdio.h>
int array[100];
int main()
{

}
或者
int main()
{
	static int array[100];
}

2.对于局部数组我们还有简写的初始化语法。如果一个数组被部分初始化,没有被初始化的元素会被自动设置为相应类型的0。

int main()
{
	int array[10]={0};
}

3.使用函数初始化数组memset

#include<string.h>
int main()
{
	int array[10];
	memset(array,0,10*sizeof(int));
}

memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。在头文件string.h中。
**void memset(void s, int ch, size_t n);
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset函数也是以字节为单位进行赋值的。

int main()
{
	char array1[5];
	memset(array1,'1',5);
	int array2[5];
	memset(array2,1,5*4);
}

使用memset函数
将array1字符数组初始化为1成功
将array2整型数组初始化为1失败
原因是memset函数时以字节为单位进行赋值的。
array1中将‘1’替换给1个字节,使得每个字符为‘1’
而array2中将1替换给1个字节,一个数组元素为4个字节
元素的二进制码为:
00000001 00000001 00000001 00000001
转化成十六进制就是0x01010101,就等于16843009,就完成了对一个int元素的赋值了。
使用memset函数的注意点
1.memset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。-1二进制码为11111111
2.:memset(void *s, int ch,size_t n);中ch实际范围应该在0~~255,因为该函数只能取ch的后八位赋值给你所输入的范围的每个字节.
字符数组初始化
在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串。总结起来有以下三种方式:

(1) char str[10]="";
(2) char str[10]={’\0’};
(3) char str[10]; str[0]=’\0’;
第(1)(2)种方式是将str数组的所有元素都初始化为’\0’,而第(3)种方式是只将str数组的第一个元素初始化为’\0’。如果数组的size非常大,那么前两种方式将会造成很大的开销。

所以,除非必要(即我们需要将str数组的所有元素都初始化为0的情况),我们都应该选用第(3)种方式来初始化字符串数组。

猜你喜欢

转载自blog.csdn.net/WxqHUT/article/details/85122857