C++常考面试题

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;

参考博客
参考文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值