数组初始化总结

整型数组

数组初始化为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函数的注意点

  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非常大,那么前两种方式将会造成很大的开销。
'\0’代表ASCII码为0的字符,从ASCII码表中可以查到,ASCII码为0的字符不是一个可以显示的字符,而是一个“空操作符”,即他什么也不做,是用来作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨别的标志。
所以,除非必要(即我们需要将str数组的所有元素都初始化为0的情况),我们都应该选用第(3)种方式来初始化字符串数组。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值