目录
1.memset
注意:定义变量时一定要进行初始化,尤其是数组和结构体这种占用内存大的数据结构。在使用数组的时候经常因为没有初始化而产生“烫烫烫烫烫烫”这样的野值,俗称“乱码”。
memset() 函数可以说是初始化内存的“万能函数”,通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。
- 函数原型:
void * memset ( void * ptr, int value, size_t num );
- 函数功能:
将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。
2.memcpy
- 函数原型:
void * memcpy ( void * destination, const void * source, size_t num );
- 函数功能
复制source 所指的内存内容的前 num 个字节到 destination 所指的内存地址上。
- 注意事项:
memcpy() 并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用带来了很大的灵活性,可以面向任何数据类型进行复制。
- dest 指针要分配足够的空间,也即大于等于 num 字节的空间。如果没有分配空间,会出现断错误。
- dest 和 src 所指的内存空间不能重叠(如果发生了重叠,使用 memmove() 会更加安全)。
与 strcpy() 不同的是,memcpy() 会完整的复制 num 个字节,不会因为遇到“\0”而结束。
【返回值】返回指向 dest 的指针。注意返回的指针类型是 void,使用时一般要进行强制类型转换。扫描二维码关注公众号,回复: 10085680 查看本文章
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N (10)
int main()
{
char* p1 = "abcde";
char* p2 = (char*)malloc(sizeof(char) * N);
char* p3 = (char*)memcpy(p2, p1, N);
printf("p2 = %s\np3 = %s\n", p2, p3);
free(p2);
p2 = NULL;
p3 = NULL;
system("pause");
return 0;
}
3.libconfig使用
4. struct 结构体
结构体是一个由程序员定义的数据类型,可以容纳许多不同的数据值。
区别(和类的区别):
- 尽管结构体可以包含成员函数,但它们很少这样做,所以,通常情况下结构体声明只会声明成员变量。
- 结构体声明通常不包括 public 或 private 的访问修饰符。
- 类成员默认情况是私有的,而结构体的成员则默认为 public。
结构体声明和定义:
struct Date
{
int day, month, year;
};
初始化方式:
Date birthday = {23, 8, 1983};
Date birthday = {23,8};
注意:如果有某个成员未被初始化,那么在这种情况下,跟随在该成员后面的成员都不能初始化。
构造函数(提供默认值):
构造函数通常用来初始化结构体成员变量,这和初始化类成员变量是相同的。与类构造函数一样,结构体的构造函数必须是与结构体名称相同的公共成员函数,并且没有返回类型。因为默认情况下,所有结构体成员都是公开的,所以不需要使用关键字 public。
struct Date
{
int day, month, year;
Date()
{
day=1;
month=7;
year=2019;
}
};
struct常用来在类中初始化参数
class a_a
{
struct Date
{
int day, month, year;
Date()
{
day=1;
month=7;
year=2019;
}
};
a_a(Date date)
{
day=date.day;
month=date.month;
year=date.year;
}
~a_a(){}
private:
int day;
int month;
int year;
};