// CPP_Test@2014.10.22.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <assert.h> /************************************************************************/
/* copyright (c) 2014 kernel_main
/* c++试常考点
/* 转载请注明出处:http://www.cnblogs.com/kernel0815/
/************************************************************************/ //strcpy 函数实现
char* strcpy(char* strDst, const char* strSrc)
{
assert((NULL!=strDst) && (NULL!=strSrc));//断言字符串地址非0
char* address = strDst;
while((*strDst++ = *strSrc++) != '\0');
return address;
} //strlen 函数实现
int strlen(const char* str)
{
assert(NULL != str);//断言字符串地址非0
int len = ;
while (*str++ != '\0')
{
len++;
} return len;
} //String 实现
class String
{
public:
String(const char* str =NULL); //构造函数
String(String & str); //拷贝构造函数
~String(void); //析构函数
public:
void print();
String& operator=(const String &str);//赋值函数 private:
char* m_data;// 用于保存字符串
}; String::String(const char* str)
{
if (NULL == str)
{
m_data = new char[];//得分点:对空字符串自动申请存放结束标志'\0'的空
assert(NULL != m_data);//加分点:对m_data加NULL 判断
*m_data = '\0';
}
else
{
int len = strlen(str);
m_data = new char[len+];
assert(NULL != m_data);// 若能加 NULL 判断则更好
strcpy(m_data, str);
}
} String::String(String & str)
{
int len = strlen(str.m_data);
m_data = new char[len+];//加分点:对m_data加NULL判断
assert(NULL != m_data);
strcpy(m_data,str.m_data);
} String::~String()
{
if (m_data)
{
delete[] m_data;
m_data = NULL;
}
} String& String::operator=(const String& str)
{
if (this == &str)//得分点:检查自赋值
{
return *this;
} //得分点:释放原有的内存资源
if (m_data)
{
delete[] m_data;
} int len = strlen(str.m_data);
m_data = new char[len+]; //加分点:对m_data加NULL判断
strcpy(m_data, str.m_data); return *this;//得分点:返回本对象的引用
} void String::print()
{
printf("pint: %s @ 0x%08x\n", m_data);
} //检测CPU是Little_endian还是Big_endian
//在实际内存中:
//0x12345678 四个字节(相当于32bit CPU下的一个ulong、int)的内存存放形式如下:
//Big_endian: 12 34 56 78 (将高序字节存储在起始地址, 低字节放高地址中, 高字节放低地址中)
//little_endian: 78 56 34 12 (将低序字节存储在起始地址, 低字节放低地址中, 高字节放高地址中)
int checkCPU()
{
union u
{
int a;
char b;
} c; //00 00 00 00
c.a = ; // 例子:如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
// big-endian little-endian
// 0x0000 0x12 0xcd
// 0x0001 0x34 0xab
// 0x0002 0xab 0x34
// 0x0003 0xcd 0x12
// 同样这个例子中:将1(即0x00000001)写入:
// big-endian little-endian
// 0x0000 0x00 0x01
// 0x0001 0x00 0x00
// 0x0002 0x00 0x00
// 0x0003 0x01 0x00 return ( == c.b); //--如果是big_endian,
} int _tmain(int argc, _TCHAR* argv[])
{ String a("Hello World.");
String b(a);
String c = b;
char* p = NULL; String d(p);
d.print(); a.print();
b.print();
c.print(); printf("this computer is %s CPU\n", checkCPU()?"little_endian":"big_endian"); return ;
}

【C++面试】常考题复习的更多相关文章

  1. 【C++面试】常考题复习:排序算法

    // Sort.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdlib.h> /*********** ...

  2. Sql面试常考题(持续添加)

    最近萌生换工作的念头,于是上网下载了一些公司的面试题,重新看了面试题中的Sql部分,这些查询题有时候只是兜一个弯角来考,对于给EF惯坏的孩子来说还是有点难度的(给面试官鄙视了几下的结果),所以列出最近 ...

  3. leetcode Two Sum II - Input array is sorted <面试常考题>

    题目描述 //二分查找的变形   用头尾两个指针进行  面试考察题 class Solution { public: vector<int> twoSum(vector<int> ...

  4. 前端一面/面试常考题1-页面布局:假设高度已知,请写出三栏布局,其中左栏、右栏宽度各为300px,中间自适应。

    题目:假设高度已知,请写出三栏布局,其中左栏.右栏宽度各为300px,中间自适应. [题外话:日常宣读我的目标===想要成为一名优雅的程序媛] 一.分析 1. 题目真的像我们想得这么简单吗? 其实不然 ...

  5. java面试常考题

    基础知识: 1.C++或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常.违反语义规则包括2种情况.一种是JAVA类库 ...

  6. PHP面试常考之会话控制

    你好,是我琉忆,欢迎您来到PHP面试专栏.本周(2019.2-25至3-1)的一三五更新的文章如下: 周一:PHP面试常考之会话控制周三:PHP面试常考之网络协议周五:PHP面试常考题之会话控制和网络 ...

  7. python面试总结3(性能分析优化,GIl常考题)

    python性能分析和优化,GIL常考题 什么是Cpython GIL Cpython解释器的内存管理并不是线程安全的 保护多线程情况下对python对象访问 Cpython使用简单的锁机制避免多个线 ...

  8. python面试总结2(函数常考题和异常处理)

    python函数常考题 可变类型为参数 不能类型为参数 python如何传递参数 传递值还是引用呢?都不是.唯一支持的参数传递是共享穿参 Call by Object(Call by Object R ...

  9. PHP面试常考内容之Memcache和Redis(2)

    你好,是我琉忆.继周一(2019.2-18)发布的"PHP面试常考内容之Memcache和Redis(1)"后,这是第二篇,感谢你的支持和阅读.本周(2019.2-18至2-22) ...

随机推荐

  1. OAF_EO系列4 - Create详解和实现(案例)

    2014-06-02 Created By BaoXinjian

  2. Mac下安装JDK 6

    https://support.apple.com/kb/DL1572?viewlocale=zh_CN&locale=en_US 下载 , 安装

  3. http头信息

    请求头:用于告诉服务器,客户机支持的数据类型accept-charset:用于告诉服务器,客户机采用的编码accept-Encoding:用于告诉服务器,客户机支持的数据压缩格式Host:客户机通过这 ...

  4. Xcode7--坑无法运行iOS9以下的模拟器

    Unable to open liblaunch_sim.dylib. Try reinstalling Xcode or the simulator 解决办法 一.找到目标文件 /Applicati ...

  5. ruby1.8到2.1语法改变

    1定义hash的语法改变old_way = {:foo => "bar", :one => 1}new_way = {foo: "bar", one ...

  6. 设置oracle_home

    set ORACLE_HOME=F:\app\rh\product\11.2.0\dbhome_1

  7. DBCP数据库连接池

    在用JDBC连接数据库的时候,需要创建对数据库的连接,这样才能执行后续的操作.然而,这样做有两个问题: 数据库允许的连接个数有限 创建连接的过程需要消耗内存和时间 所以,JDBC引入了连接池的概念.也 ...

  8. photoshop如何选择图层?

    选择移动工具,在上边的属性栏里勾选"自动选择图层"功能即可. 只要打上勾, 并且配上是选择图层,还是组, 点到哪里就选中哪里.   参考: http://zhidao.baidu. ...

  9. Mingyang.net:格式化Hibernate的SQL输出语句

    在sping与hibernate整合中可以这样的设置 <property name="hibernateProperties"> <props> <p ...

  10. Linux驱动之准备

    第一: 开始系统学习Linux驱动,以前断断续续也玩玩了一下,开贴来系统学习Linux驱动. 硬件平台是JZ2440-4.3 ARM9开发板,开发板运行系统版本Linux3.4.2内核(内核移植,下载 ...