美文网首页
C++复习--点点知识点

C++复习--点点知识点

作者: 要灰起来了 | 来源:发表于2017-07-31 00:20 被阅读0次

    1.strlen与sizeof的区别?

    a.strlen是一个函数,sizeof是一个运算符;

    b.strlen返回int,sizeof返回是size_t类型,被定义为unsigned int

    c.strlen的参数输入是一个char*类型,必须以‘\0’;sizeof的输入是类型等;

    d.strlen是估算一个字符串的长度;而sizeof是计算容纳空间的大小。

    2.strlen的实现,strcpy的实现?

    char* strcpy(char * dest,const char* source)

    {

         assert((dest!=NULL)&&(source!=NULL));

         char * address = dest;

         while((*dest++==*source++)!='\0');

         return address;

    }

    int strlen(const char* str)

    {

        assert(str!=NULL);

        int len = 0;

        while(*str++!='\0')

        {

             len++;

         }

        return len;

    }

    3.struct与union的区别?

    struct存储多个成员的信息,而union在一个时刻只存储一个成员的信息,会复写其它成员;

    4.c++中那些内存需要手动释放?

    malloc与free对应,new与delete 对应。malloc需要考虑内存申请失败的情况,同时,free后需要将指针指为空,防止野指针。

    声明指针需小心,防止野指针。int * p = NULL;

    5.防止被重复引用

    #ifndef __HELLOWORLD

    #define __HELLOWORLD

    #endif

    6.extern "C" {} 其中按照c的防止进行编译,实现C调用C++的方式,实现混合编程。

    链接:https://www.nowcoder.com/questionTerminal/a314892082e649df8ee6294e012345b6

    来源:牛客网

    预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。

    关于预处理命令中的文件包含(#include),宏定义(#define),书上已经有了详细的说明,在这里就不详述了。这里主要是对条件编译(#ifdef,#else,#endif,#if等)进行说明。

    7.memset以及memcpy的实现

    void* memset(void* s,int ch,size_t n)  功能:将s中当前位置后面的n个字节赋值ch.

    void * memcpy(void* dest,const void* source, size_t n)  功能:将指针src指向的内存空间的n个字节复制到dest指针指向的内存空间

    8.String类的构造函数,析构函数,赋值函数等的实现

    String::String(const char* str)

    {

        if(str==NULL)

        {

             m_data = new char[1];

             m_data[0] = '\0';

        }

        else

        {

              int len = strlen(str);

              m_data = new char[len+1];

              strcpy(m_data,str);

         }

    }

    String::~String()

    {

        delete []m_data;

    }

    String::String(const char &other)

    {

        int len = strlen(other.m_data);

        m_data = new char[len+1];

        strcpy(m_data,other.m_data);

    }

    String &String::operation=(const char& other)

    {

        if(&other==this)

        {

             return *this;

         }

         delete [] m_data;

         int len = strlen(other.m_data);

         m_data = new char[len+!];

         strcpy(m_data,other.m_data);

         return *this;

    }

    9.const与static的用途

    static的用途:

    a.模块内,用于变量上,不能被外部模块使用,只能用于本模块。

    b.模块内,用于函数上,不能被外部模块调用,只能用于本模块。

    c.用于类内部变量,表示这个变量属于整个类,所有类只有一份内存拷贝。

    d.用于类内部函数,表示不用实例类,直接可以调用;不接受this,只能访问static成员。

    e.函数内部,用于变量,维持上次的值。

    const的用途:

    a.用于变量上,表示该变量不能被改变,定义时对它进行初始化。

    b.用于类变量上,必须定义时初始化。

    c.用于指针,可以指定指针也是指定指针对应的数据;

    d.用于类的成员函数,放在右边,表明这是一个常量函数,不能修改类的成员变量。

    e.用于类的成员函数返回,表明不能作为左值,被赋值。

    10,File等

    http://www.cnblogs.com/youngt/p/3708655.html

    相关文章

      网友评论

          本文标题:C++复习--点点知识点

          本文链接:https://www.haomeiwen.com/subject/osyikxtx.html