静态数组 memset 数组初始化

文章讲述了C++中数组的静态和动态创建方式,以及memset在初始化字符数组中的应用。强调了不同初始化方法的速度、适用性和限制,如使用for循环和指定初始化器的优缺点。
摘要由CSDN通过智能技术生成

数组的创建

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循环初始化经优化后速度并不慢)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值