1. 反转字符串

char* strrev1(const char* str)
{
int len = strlen(str);
char *temp = new char[len + ];
char *p = temp + len;
*p = '\0';
p--; while(*str != '\0')
{
*p-- = *str++;
}
p = NULL;
return temp;
}

2. 实现strcmp,对比两个字符串,相同返回0,前者大于后者返回正数,反之,返回负数

  首先,函数原型得写正确:int strcmp(char *source, char *dest)

int strcmp(char *source, char *dest)
{ int ret = ;
while(!(ret = *(unsigned char *)source - *(unsigned char *)dest) && *dest)
{
++source;
++dest;
} if(ret < )
ret = -;
else if(ret > )
ret = ; return ret;
}

3. strcpy的实现

char *strcpy(char *dest, const char *src)
{
   if(NULL == dest || NULL = src) return NULL;
char* r = dest;
while((*(dest++) = *(src++)) != '\0')
;
return r;
}

3. 请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句

#define Max((a),(b)) ((a)/(b))?(a):(b)

4. 还是关于宏的问题:

  下面例子输出的是什么,做了什么运算得出的结果?

#define SQR(X) X*X

int _tmain(int argc, _TCHAR* argv[])
{
int a = ;
int k = ;
int m = ;
a /= SQR(k+m)/SQR(k+m);
printf("%d\n",a);
return ;
}

  

  解释:宏没有类型检查,只是做了简单的符号对换!其运算相当于下面语句:

a/=k+m*k+m/k+m*k+m;

  即 a = a/7,所以,答案为:1

5. const 符号常量; 
(1)const char *p 
(2)char const *p 
(3)char * const p 
说明上面三种描述的区别;

解释:(1)(2)都是同一个意思,p是一个指针,指向一个字符常量,p自身的内容是可变的,但是p指向的内容是不可变的;

(3)与前两者不同,p是一个常量指针,初始化之后,p自身的内容不可变,但是p指向的内容是可变的。

6.  socket缓冲区大小设置

//设置发送和接收缓冲区
int rcvbuf;
int rcvbufsize=sizeof(int);
if(getsockopt(m_Socket,SOL_SOCKET,SO_RCVBUF,(char*)
&rcvbuf,&rcvbufsize)!=
SOCKET_ERROR)
{
if(rcvbuf<)
rcvbuf=;
setsockopt(m_Socket,SOL_SOCKET,SO_RCVBUF,(char*)
&rcvbuf,rcvbufsize);
}
if(getsockopt(m_Socket,SOL_SOCKET,SO_SNDBUF,(char*)
&rcvbuf,&rcvbufsize)!=SOCKET_ERROR)
{
if(rcvbuf<)
rcvbuf=;
setsockopt(m_Socket,SOL_SOCKET,SO_SNDBUF,(char*)
&rcvbuf,rcvbufsize);
}

7. 在不实例化struct的情况下,求成员变量的偏移量

#define FIND(struc, e) (unsigned int)(&((struc*)0)->e)

typedef struct stu
{
char a[];
int b;
double d;
}stu; int main()
{
printf("%d\n",FIND(stu,a));
printf("%d\n",FIND(stu,b));
printf("%d\n",FIND(stu,d));
return ;
}

8. 设计仅能在堆创建的类

  思路:将析构函数设置为private,从而使得如果在栈上创建该类的话,会出现编译期间错误!

#include<iostream>
using namespace std; class onlyHeap
{
public:
onlyHeap()
{
cout<<"constructor"<<endl;
} void destroy()
{
delete this;
} private:
~onlyHeap()
{
cout<<"destructor"<<endl;
}
}; int main()
{
//onlyHeap he; //error while complier
onlyHeap *he = new onlyHeap();
he->destroy();
return ;
}

9. 设计仅能在栈上创建的类

  思路:重载 new 和 delete 操作符为 private。

#include <iostream>
using namespace std;
class OnlyStack
{
public: OnlyStack()
{
cout<<"构造"<<endl;
}
~OnlyStack()
{
cout<<"析构"<<endl;
}
private:
void* operator new (size_t t);
void operator delete(void *ptr);
}; int main()
{
//A* a = new A; //会报错
OnlyStack a;
return ;
}

10. dynamic_cast 与 static_cast 的区别

  dynamic_cast

  用法:dynamic_cast <type-id> (expression)

  可以使用 dynamic_cast 操作符将基类类型对象的引用或指针转换为同一继承层次中其他类型的引用或指针。它涉及运行时类型检查

  dynamic_cast 运算符可以在执行期决定真正的类型。

  如果 downcast 是安全的(也就说,如果基类指针或者引用确实指向一个派生类对象)这个运算符会传回适当转型过的指针。downcast:基类=>继承类

  如果 downcast 不安全,这个运算符会传回空指针(也就是说,基类指针或者引用没有指向一个派生类对象)。

  dynamic_cast 主要用于类层次间的上行(子类转换称父类)转换和下行(父类转换成子类)转换,还可以用于类之间的交叉转换。
  在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;
  在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。

  static_cast

  用法:static_cast < type-id > ( expression )

  该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。

  它主要有如下几种用法:

①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。

进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;

进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。

②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。

③把空指针转换成目标类型的空指针。

④把任何类型的表达式转换成void类型。

注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。

11. strlen 和 sizeof的使用

const char *p = "Hello World";
char p[] = "Hello World";

  分别求长度和所占用空间大小。

  提示:求长度都可以用strlen(p),求占内存空间大小第一个不能用sizeof,第二个可以用sizeof。另外,第二个:strlen(p) = 11, sizeof(p) = 12

http://blog.csdn.net/lincyang/article/category/710309

C++笔试题库-------Coding整理的更多相关文章

  1. acwing 算法面试、笔试题公开课整理记录

    week1 Google KickStart 2019 A轮 讲解视频地址AcWing 549. 训练   tag: 排序 遍历 在线练习地址AcWing 550. 包裹       在线练习地址Ac ...

  2. Oracle笔试题库 附参考答案

    1.  下列不属于ORACLE的逻辑结构的是(C) 区 段 数据文件 表空间 2. 下面哪个用户不是ORACLE缺省安装后就存在的用户(A) A . SYSDBA B. SYSTEM C. SCOTT ...

  3. Oracle笔试题库之问答题篇-总共60道

    1.把表A从表空间TSP1更改成表空间TSP2的方法 解答:alter table A move tablespace TSP2 2.删除表的列: 解答:alert table 表名 drop 列名 ...

  4. C++笔试题库之编程、问答题 100~150道

    101. winsock建立连接的主要实现步骤? 答: 服务器端:socket()建立套接字,绑定(bind)并监听(listen),用accept()等待客户端连接, accept()发现有客户端连 ...

  5. Java笔试题库之选题题篇【71-140题】

    71下面哪几个函数是public void method(){̷}的重载函数?() A.public void method( int m){̷} B.public int method(){̷} C ...

  6. C++笔试题库之编程、问答题 200~300道

    201下面的代码有什么问题?并请给出正确的写法. void DoSomeThing(char* p) { char str[16]; int n; assert(NULL != p); sscanf( ...

  7. C++笔试题库之编程、问答题 150~200道

    151.写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值 int a = 4; (A)a += (a++); (B) a += (++a) ;(C) (a++) += a;( ...

  8. Java笔试题库之选题题篇【1-70题】

    1.下面中哪两个可以在A的子类中使用:( ) class A { protected int method1 (int a, int b) { return 0; } } A. public int ...

  9. Java笔试题库之选题题篇【141-210题】

    141.Struts框架可以支持以下哪种程序开发语言? A.C B.C++ C.Java D.C# 解答:C 142.在Servlet处理请求的方式为. A.以进程的方式 B.以程序的方式 C.以线程 ...

随机推荐

  1. Array.prototype.map()

    mdn上解释的特别详细 概述 map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组. 语法 array.map(callback[, thisArg]) 参数 callb ...

  2. 利用sfntly的sfnttool.jar提取中文字体

    雨忆博客中提到了sfntly(具体介绍可以看:https://code.google.com/p/sfntly/),利用其中sfnttool.jar就可以提取只包含指定字符的字体,如果想在页面中通过@ ...

  3. JS 返回上一步(退回上一步上一个网页)

    链接式: <a href="JavaScript:history.go(-1)">返回上一步</a> <a href="<%=Requ ...

  4. shell脚本获取mysql插入数据自增长id的值

    shell脚本获取mysql插入数据自增长id的值 在shell脚本中我们可以通过last_insert_id()获取id值,但是,需要注意的是,该函数必须在执行插入操作的sql语句之后,立即调用,否 ...

  5. eval函数:分号的应用

    eval("echo'hello world';"); ("参数;") eval函数把参数当做php代码来执行,参数后要有分号,最后还要另加一个分号 相当于: ...

  6. Fiddle的应用

    在Composer中输入测试的网址: 可能会发生一下情况,这意味着需要在左侧面板中选择一项,来看回应:   选择一个请求后,选择TextView,看原生的回应(Response)内容

  7. 转 四大Java EE容器(Tomcat、JBoss、Resin、Glassfish)之简单比较

                                      现在流行的Java EE容器有很多:Tomcat.JBoss.Resin.Glassfish等等.下面对这四种Java EE容器进行 ...

  8. 从一到二:利用mnist训练集生成的caffemodel对mnist测试集与自己手写的数字进行测试

    通过从零到一的教程,我们已经得到了通过mnist训练集生成的caffemodel,主要包含下面四个文件: 接下来就可以利用模型进行测试了.关于测试方法按照上篇教程还是选择bat文件,当然python. ...

  9. BZOJ 1483 梦幻布丁

    Description \(N\)个布丁摆成一行,进行\(M\)次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为\(1,2,2,1\)的四个布丁一共有\ ...

  10. A Knight's Journey

    poj2488:http://poj.org/problem?id=2488 题意:给你一张地图,然后有一个骑士,骑士可以从地图的任意一个方格开始,作为起点,问你该骑士能否走遍整张题图.题解:首先想到 ...