初始化数据的几种方法
文章目录
前言
1、mement:初始化数据
2、动态内存初始化数据
1.mement的用法:主要是初始化数据
1.1 基本概念
memset是计算机中C/C++语言初始化函数。作用是将某一块内存中的内容全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。
(1)字节为单位进行赋值
void *memset(void *s, int ch, size_t n);
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
(2)memset的作用
是在一段内存块中填充某个给定的值,它是对较大
的结构体
或数组
进行清零操作的一种最快方法 [1] 。
(3)memset()函数原型
extern void *memset(void *buffer, int c, int count)
buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度.
示例:
memset (a,1,20),就是对a指向的内存的20个字节进行赋值,每个都用数1去填充,转为二进制后,1就是00000001,占一个字节。一个int元素是4字节,合一起是0000 0001,0000 0001,0000 0001,0000 0001,转化成十六进制就是0x01010101,就等于16843009,就完成了对一个int元素的赋值了。
memset函数按字节对内存块进行初始化,所以不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。
1.2 代码示例
常用类型初始化数据为0:
较大的结构体
或数组
进行清零操作
//字符串初始化数据
char array_char[10];
mement(array, 0, sizeof(array));
//数组初始化数据
int array_int[10];
mement(array_int, 0, sizeof(arrayint));
//数组初始化数据
struct Demo
{
int a;
char b;
int a1[10];
char b1[10];
};
//结构体初始化数据
Demo array_struct;
mement(array_struct, 0, sizeof(array));
2.动态、静态内存初始化
2.1 静态初始化
int a[5] = {
1, 2, 3, 4, 5}; // 1 2 3 4 5
int b[3] = {
1}; // 1 0 0
int c[5] = {
1,}; // 1 0 0 0 0
//数组d初始化时长度为变量n,注意此时必须要求n为const类型,否则会报错。
const int n = 3;
int d[n] = {
1, 2, 3}; // 1 2 3
//典型使用示例:
const char *pc = "a very long literal string"; // 处理C风格字符串时使用const指针
//一维数组
int value[100]() // 则初始化为0
int value[100] = {
1,2}; // value[0]和value[1]的值分别为1和2,而没有定义的value[i>1]
//字符串初始化
//注意默认会在字符数组最后加上’\0’。如果字符常量长度不够数组其他元素自动初始化为 ‘\0’。
char cs[8] = "abcedfg";
char c2[5] = "abc";
//不指定长度初始化
int nums[] = {
1, 2, 3}; //数组长度为3
2.2 动态初始化
//动态非数组
int* pi = new int(1);
float* pf = new float(2.0f);
char* pc = new char('c');
//动态数组
int *pia2 = new int[10] (); // 类似于int pia2[10] ,每个元素初始化为0
2.3 标准动态内存分配的写法,及new 和 delete的使用
保证不会出现
野指针
:内存不会泄露
// 初始化为 null 的指针
double* pvalue = NULL;
// 为变量请求内存
pvalue = new double;
//判断是否分配成功,自由存储区是否已被用完
if(pvalue == NULL)
{
cout<<"error new !"
exit(1);
}
//释放内存,这里释放后指针不一定为null
delete pavalue;
//把释放后的指针置为 null
pavalue = NULL;
总结
持续更新中…
扫描二维码关注公众号,回复:
15914913 查看本文章