嵌入式研发工程师面试试题大全(ANSI CC++方面的知识 ) | |
一.ANSI C/C++方面的知识 1、简答题。 1、 如何在C中初始化一个字符数组。 逐个字符没有考虑到字符串结束符‘\0’,所以会产生意想不到的错误。 比如以下程序: int main() { int i; char p[6] = {''''a'''',''''b'''',''''c'''',''''d'''',''''e'''',''''f''''}; printf("%s",p); while(1); return 0; } 运行后显示: abcdef@ 问题3:const & 指针 类型声明中const用来修饰一个常量,有如下两种写法,那么,请问,下面分别用const限定不可变的内容是什么? 1)、const在前面 a. const int nValue; //nValue是const 把类型int撇开,变量nValue作为一个整体,因此 nValue是const型; b. const char *pContent; //*pContent是const, pContent可变 把类型char撇开,变量 *pContent作为一个整体,因此 *pContent是const型; c. const (char *) pContent;//pContent是const,*pContent可变 把类型char * 撇开,注意这里(char * )是一个整体,而变量 pContent作为一个整体,因此 pContent是const型; d. char* const pContent; //pContent是const,*pContent可变 const与变量间没有类型,变量 pContent作为一个整体,因此 pContent是const型; e. const char* const pContent; //pContent和*pContent都是const 这里分为两层,外层:把类型char 撇开,变量 * const pContent作为一个整体,因此 * pContent是const型;内层:没有类型,因此 pContent 是 const 型。 2)、const在后面,与上面的声明对等 (这类型更容易判断) a. int const nValue; // nValue是const const与变量之间没有类型,const后面那部分整体是const型,因此nValue是const型 b. char const * pContent;// *pContent是const, pContent可变 const与变量之间没有类型,const后面那部分整体是const型,因此 * pContent是const型 c. (char *) const pContent;//pContent是const,*pContent可变 const与变量之间没有类型,const后面那部分整体是const型,因此 pContent是const型 d. char* const pContent;// pContent是const,*pContent可变 const与变量之间没有类型,const后面那部分整体是const型,因此 pContent是const型 e. char const* const pContent;// pContent和*pContent都是const 分为两层,外层:撇开类型char,const后面那部分整体* const pContent是const型,因此 * pContent是const型;内层:const与pContent之间无类型,因此pContent是const型。 C++中CONST C中常用:#define 变量名 变量值定义一个值替代,然而却有个致命缺点:缺乏类型检测机制,这样预处理理在C++中成为可能引发错误的隐患,于是引入const. const使用: 1. 用于指针的两种情况:const是一个左结合的类型修饰符. int const *A; //A可变,*A不可变 int *const A; //A不可变,*A可变 2.限定函数的传递值参数: void function(const int Var); //传递过来的参数在函数内不可以改变. 3.限定函数返回值型. const int function(); //此时const无意义 const myclassname function(); //函数返回自定义类型myclassname. 20、C语言的volatile的含义是什么。使用时会对编译器有什么暗示。 volatile的本意是“易变的” 由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化,但有可能会读脏数据。当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。 精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。 下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3). 多线程应用中被几个任务共享的变量 嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。 Volatile的完全扩展: 1). 一个参数既可以是const还可以是volatile吗?解释为什么。 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 2). 一个指针可以是volatile 吗?解释为什么。 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。 3). 下面的函数有什么错误: int square(volatile int *ptr) { return *ptr * *ptr; } 这段代码的有个恶作剧。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码: int square(volatile int *ptr) { int a,b; a = *ptr; b = *ptr; return a * b; } 由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下: long square(volatile int *ptr) { int a; a = *ptr; return a * a; } |
共1条
1/1 1 跳转至页
嵌入式研发工程师面试试题大全(ANSI CC++方面的知识 )
关键词: 嵌入式 研发 工程师 面试 试题 大全 方面的 面
共1条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? |
打赏帖 | |
---|---|
【换取手持数字示波器】N32G430点亮数码管与串口打印、ADC被打赏40分 | |
老胖子聊电路--分析一个反馈电路被打赏50分 | |
【换取手持数字示波器】+点亮WS2812RGB灯被打赏50分 | |
【换取手持数字示波器】+线性调整器理论知识分享被打赏40分 | |
放大↔震荡被打赏50分 | |
【换取手持数字示波器】RTduino驱动ssd1306+sht31温湿度计被打赏40分 | |
【换取手持数字示波器】称植国产开源TobudOS到雅特力AT32F425被打赏40分 | |
【分享评测,赢取加热台】+Telink-泰凌微电子B91点灯篇被打赏20分 | |
【换取手持数字示波器】+精英板驱动LCD屏被打赏50分 | |
【换取手持数字示波器】+DFR0216全彩灯带WS2812示例分享被打赏50分 |