c++学习(三)memset memcpy libconfig++

目录

1.memset

 2.memcpy 

3.libconfig使用

4. struct 结构体


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使用

参考: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;

};
发布了44 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/He3he3he/article/details/103722638