整型数组
数组初始化为0
1.静态变量和全局变量会自动初始化为0。
int array[100];
int main()
{
static int array[100];
}
2.对于局部数组我们还有简写的初始化语法。
如果一个数组被部分初始化,没有被初始化的元素会被自动设置为相应类型的0。
int main()
{
int array[10] = { 0 };
}
3.使用函数初始化数组memset
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函数的注意点
- memset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)-1二进制码为11111111
- memset(void *s, int ch,size_t n);中ch实际范围应该在0-255,因为该函数只能取ch的后八位赋值给你所输入的范围的每个字节.
字符数组初始化
在C语言编程中,当我们声明一个字符串数组的时候,常常需要把它初始化为空串。总结起来有以下三种方式:
- char str[10]="";
- char str[10]={’\0’};
- char str[10]; str[0]=’\0’;
第(1)(2)种方式是将str数组的所有元素都初始化为’\0’,而第(3)种方式是只将str数组的第一个元素初始化为’\0’。如果数组的size非常大,那么前两种方式将会造成很大的开销。
'\0’代表ASCII码为0的字符,从ASCII码表中可以查到,ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即他什么也不做,是用来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。
所以,除非必要(即我们需要将str数组的所有元素都初始化为0的情况),我们都应该选用第(3)种方式来初始化字符串数组。