C/C++知识点:静态数据初始化、动态内存数据初始化、new和delete的正确使用、mement初始化数组和结构体-静态内存数据。

初始化数据的几种方法



前言

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 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_55491446/article/details/128780289