C++常考面试题

来源:互联网 发布:nginx 获取header 编辑:程序博客网 时间:2024/05/18 11:49

1. String类的实现

 string::string(const char* str){    if(str==NULL)    {        m_data=new char[1];        m_data='\0';    }    else    {        m_data=new char[strlen(str)+1];        strcpy(m_data,str);    }}string::string(const string& str){    m_data=new char[strlen(str.m_data)+1];    strcpy(m_data,str.m_data);}string& string::operator=(const string& str){    if(this==&str)    {    return *this;    }    delete[] m_data;    m_data=new char[strlen(str)+1];    strcpy(m_data,str.m_data);    return *this;}string::~string(void){    delete [] m_data;}

2. 引用”与指针的区别是什么?

  1. 指针通过某个指针变量指向一个对象后,对他所指向的变量简介操作。引用 本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
  2. 流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、

3. 下面关于“联合”的题目的输出?

union{    int i;    char x[2];}a;void main(){    a.x[0]=10;    a.x[1]=1;    printf("%d",a.i);    getchar();}
  • 首先是低位a.x[0]=0x0a a.x[1]=0x01
  • a内存是0x00000000共四个字节。 通过赋值后内存为0x0000010a
  • 在windows系统是低字节在前,高字节在后,得出的结果是266(010A)
    在linux系统是高字节在前,低字节在后,得出的结果是0x(0A010000)
  • 联合体的内存是共享的,所有变量共用一块内存,为最大内存空间变量的内存空间

4. char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。

char *strcpy(char *strDest, const char *strSrc){    assert((strDest!=NULL)&&(strSrc!=NULL));    char *address=strDest;    while((*strDest++=*strSrc++)!='\0')        NULL;    return address; }int strlen( const char*str )  // 输入参数const{    assert( str != NULL );  // 断言字符串地址非0   int len = 0;    while( (*str++) !='\0' )     {         len++;     }     return len;}

5. h头文件中的ifndef/define/endif 的作用。
- 防止该头文件被重复引用。
6.<.h> 与”.h”的区别?
- 标准库的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。
7. 描述内存分配方式以及它们的区别?
- 静态存储区,如全局变量,静态变量,程序运行期间一直存在
- 栈,如函数局部变量,函数执行结束时,内存资源被释放。
- 堆,如指针,又称动态内存分配空间。程序在运行的时候用malloc 或new 申请任意多少的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活。
8. 链表题:一个链表的结点结构

typedef struct node{int data;struct node *next;}node;

参考博客
参考文

0 0
原创粉丝点击