[普通]《ASCE1885的IT 笔试面试题》-- 0000 0000

作者(passion) 阅读(819次) 评论(0) 分类( 面试题)

问题1:写出BOOL flag与“零值”比较的if语句

 

解答:if(flag)或者if(!flag);

如下写法均属不良风格:

if(flag == TRUE)

if(flag == 1)

if(flag==FALSE)

if(flag==0)

 

问题2:写出char *p与“零值”比较的if语句

 

解答:if(p == NULL)或者if(p != NULL)

如下写法均属不良风格:

if(p==0)

if(p!=0)

if(p)

if(!p)

 

问题3:在C++程序中调用被C编译器编译后的函数,为什么要加extern “C”

 

解答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数原型是:void ace(int x, int y);

该函数被C编译器编译后在库中的名字是_ace,而C++编译器则会产生像_ace_int_int之类的名字。

因此,C++提供了C连接交换指定符号extern “C”来解决名字匹配问题。

 

问题4:已知strcpy函数原型是

         char *strcpy(char *strDest, const char *strSrc);

其中strDest是目的字符串,strSrc是源字符串。

1)不调用C/C++的字符串库函数,请编写函数strcpy

2)strcpy能把strSrc的内容复制到strDest,为什么还要char*类型的返回值

 

解答:

1

char *strcpy(char *strDest, const char *strSrc)

{

       assert((strDest != NULL) && (strSrc != NULL));        

       char *address = strDest;         

       while((*strDest++ = *strSrc++) != '/0')

       {

       }

       return address;

}

2)为了实现链式表达式,例如:

int length = strlen(strcpy(strDest, "SEE YOU IN ANOTHER LIFE BROTHER!"));

 

问题5:已知类String的原型为:

class String

{

public:

       String(const char *str = NULL);             //普通构造函数

       String(const String &other);            //拷贝构造函数

       ~String(void);                  //析构函数

       String & operator=(const String &other);           //赋值函数

private:

       char *m_data;           //用于保存字符串

};

请编写String的上述4个函数

 

解答:

//普通构造函数

String::String(const char *str)

{

       if(str == NULL)

       {

              m_data = new char[1];           //若能加new是否成功的判断则更好

              m_data = '/0';

       }

       else

       {

              int length = strlen(str);

              m_data = new char[length + 1];

              strcpy(m_data, str);

       }

}

 

//拷贝构造函数

String::String(const String &other)

{

       int length = strlen(other.m_data);

       m_data = new char[length + 1];

       strcpy(m_data, other.m_data);

}

 

//赋值函数

String & String::operator=(const String &other)

{

       //检查自赋值

       if(this == other)

              return *this;

 

       //释放原有的内存资源

       delete[] m_data;

 

       //分配新的内存资源,并复制内容

       int length = strlen(other.m_data);

       m_data = new char[length + 1];

       strcpy(m_data, other.m_data);

 

       //返回本对象的引用

       return *this;

}

 

//析构函数

String::~String(void)

{

       delete[] m_data;

       //由于m_data是内部数据类型,也可以写出delete m_data

}

 


« 上一篇:wifi共享上网(至尊版wifi)
« 下一篇:drcom至尊版使用openwrt路由器拨号
在这里写下您精彩的评论
  • 微信

  • QQ

  • 支付宝

返回首页
返回首页 img
返回顶部~
返回顶部 img