博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/C++面试题总结(1)
阅读量:4107 次
发布时间:2019-05-25

本文共 2504 字,大约阅读时间需要 8 分钟。

题型一:写一个宏定义一年有多少秒,忽略闰年

#define SECONDS_PER_YEAR (365*24*60*60UL)

要点:

括号 – 宏定义
U – 无符号
L – 如果是16位机器将发生溢出

题型二:定义一个宏,返回两个数中较小者

#define min(x,y) ({           \ const typeof(x) _x = (x);    \ const typeof(y) _y = (y);    \ (void) (&_x == &_y);         \ _x < _y ? _x : _y;           \})

演示程序

网上常见的答案是:

#define min(x,y) ((x)<(y)?(x):(y))

该种写法在极端调用的时候将产生副作用,如:min(x++,y++);

题型三:嵌入式系统经常具有要求程序员去访问某特定的内存位置的特点。在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa55。编译器是一个纯粹的ANSI编译器。写代码去完成这一任务。

int *ptr;ptr = (int *)0x67a9;*ptr = 0xaa55

题型四:什么是回调函数?

这个问题网上有很多答案,但由于接触的少,理解的不是很深刻,故暂时不贴答案,周末时间好好分析一下

题型五:不调用API实现内存拷贝函数

void memcpy(void *dest, const void *src, size_t count)  {      assert(dest != NULL); // 预防传入空指针     assert(src != NULL);     unsigned char *pdest = (unsigned char *)dst; // void*不能直接累加,需要类型转换      const unsigned char *psrc = (const unsigned char *)src;      assert(!(psrc<=pdst && pdst

题型六:不调用API实现字符串拷贝函数(strcpy and strncpy)

char *strcpy(char *dest, const char *src){    if((dest == NULL) || (src == NULL))    {        printf("ERROR:arg wrong\n");        return NULL;    }    char *ret_string = dest;    while(*src !='\0')    {        *dest = *src;        dest++;        src++;    }    *dest = '\0';    return ret_string;}

简化版(推荐):

char *strcpy(char *dest, const char *src){    char *ret_string = dest;    if((dest == NULL) || (src == NULL))    {        printf("arg wrong\n");        return NULL;    }    while((*dest++ = *src++) != '\0');    *dest = '\0';        return ret_string;}
char* strcpy(char* dest; const char* src){    assert((dest != NULL) && (src != NULL));  // 
char* ret_dest = dest; while((*dest++ = *src++) != '\0'); *dest = '\0'; return ret_dest;}

题型七:如何实现线程同步(网友答案,还需要整理一下)?

1:用Interlocked系列函数实现线程同步;
2:用CRITICAL_SECTION及其系列函数实现线程同步;
3:用RTL_SRWLOCK及其系列函数实现线程同步;
4:用事件内核对象实现线程同步;
5:用信号量内核对象实现线程同步;

题型八:如何创建共享内存(网友答案,还需要理解一下,没用过)?

共享内存的实现分为两步:
1、创建共享内存,用到的函数是shmget();
2、映射共享内存,就是把这段创建的共享内存映射到具体的进程空间去,使用的函数是:shmat();

题型九:

4字节对齐的前提下,完成如下求解:

struct BBB{  long num;  char *name;  short int data;  char ha;  short ba[5];}*p;p=0x1000000;p+0x200=____;(Ulong)p+0x200=____;(char*)p+0x200=____;
p+0x200= 0x1000000 + sizeof(struct BBB)*0x200;(Ulong)p+0x200=0x1000000 + 0x200;(char*)p+0x200= 0x1000000 + 0x200*sizeof(char);
  1. p是指向struct BBB型的指针,所以p+0x200就是 0x1000000 + sizeof(struct BBB)*0x200;

    (就像int *p 跟char *p中的 p + 1 区别)

  2. (Ulong)p+0x200=

    p被强制换成unsigned long 型的了,它不是指针了,所以这个就是普通的加法,像 1+1=2..

  3. (char*)p+0x200=

    p被强制转换成指向char型的指针了,所以(char*)p+0x200 = 0x1000000 + 0x200*sizeof(char)

题型10 #include

你可能感兴趣的文章
matplotlib.pyplot.plot()参数详解
查看>>
拉格朗日对偶问题详解
查看>>
MFC矩阵运算
查看>>
最小二乘法拟合:原理,python源码,C++源码
查看>>
ubuntu 安装mysql
查看>>
c# 计算器
查看>>
C# 简单的矩阵运算
查看>>
gcc 常用选项详解
查看>>
c++输入文件流ifstream用法详解
查看>>
c++输出文件流ofstream用法详解
查看>>
字符编码:ASCII,Unicode 和 UTF-8
查看>>
firewalld的基本使用
查看>>
Linux下SVN客户端使用教程
查看>>
i2c-tools
查看>>
Linux分区方案
查看>>
nc 命令详解
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>