海康嵌入式笔试题
- 格式:doc
- 大小:37.00 KB
- 文档页数:7
嵌入式系统考试试题及答案一、选择题1、嵌入式系统是指哪些设备?A.智能手机B.平板电脑C.个人电脑D.所有电子设备答案:D.所有电子设备解释:嵌入式系统是指嵌入在其它设备中的小型计算机系统,它们通常具有特定的功能和用途,例如控制机械、电子设备等。
因此,所有电子设备都可以看作是嵌入式系统的一种。
2、嵌入式系统的主要特点是什么?A.体积小B.功耗低C.处理能力强D.以上都是答案:D.以上都是解释:嵌入式系统通常具有体积小、功耗低、处理能力强等特点,这些特点使得它们能够适应各种不同的应用场景。
3、下面哪个不是嵌入式系统的应用?A.手机语音助手B.智能家居控制C.汽车发动机控制D.超级计算机答案:D.超级计算机解释:超级计算机是一种大型计算机系统,主要用于科学计算、数据分析等高性能计算领域,与嵌入式系统的应用场景不同。
4、嵌入式系统开发需要哪些技能?A.硬件设计B.软件编程C.系统集成D.以上都是答案:D.以上都是解释:嵌入式系统开发需要具备硬件设计、软件编程和系统集成等技能,因为嵌入式系统需要与具体的硬件设备进行交互,同时需要进行软件编程来实现特定的功能。
5、下面哪个是嵌入式系统开发的主要语言?A. C语言B. C++语言C. Java语言D. Python语言答案:A. C语言解释:C语言是嵌入式系统开发的主要语言之一,因为它具有高效的性能和直接访问硬件的能力,适合用于编写嵌入式系统的底层代码。
嵌入式系统是现代电子技术中非常重要的一部分,它们广泛用于各种领域,如工业控制、智能家居、医疗设备等。
因此,学习嵌入式系统的知识对于电子工程专业的学生来说是非常重要的。
在这里,我们提供了一些嵌入式系统期末考试的题目和答案,以帮助学生们更好地理解嵌入式系统的基本概念和原理。
解释:嵌入式系统通常具有小型化、快速化和智能化的特点,而巨型化并不是嵌入式系统的特点。
解释:嵌入式系统通常使用低级编程语言,如C语言和汇编语言,而Python语言通常用于高级编程和脚本编写,并不是嵌入式系统常用的编程语言。
嵌⼊式试题集(含答案)---内容简单-不够详尽1、ARM微处理器有7种⼯作模式,它们分为两类⾮特权模式、特权模式。
其中⽤户模式属于⾮特权模式2、ARM⽀持两个指令集,ARM核因运⾏的指令集不同,分别有两个状态ARM 、Thumb,状态寄存器CPSR的T 位反映了处理器运⾏不同指令的当前状态3、ARM核有多个寄存器,其中⼤部分⽤于通⽤寄存器,有⼩部分作为专⽤寄存器,R15 寄存器⽤于存储PC,R13通常⽤来存储SP 。
ARM处理器有两种总线架构,数据和指令使⽤同⼀接⼝的是冯诺依曼,数据和指令分开使⽤不同接⼝的是哈佛结构4、ARM微处理器复位后,PC的地址通常是0x0 ,初始的⼯作模式是Supervisor 。
5、ARM微处理器⽀持虚拟内存,它是通过系统控制协处理器CP15 和MMU(存储管理部件)来进⾏虚拟内存的存储和管理。
当系统发⽣数据异常和指令领取异常时,异常处理程序透过嵌⼊式操作系统的内存管理机制,通过MMU交换物理内存和虚拟内存的页⾯,以保证程序正常执⾏。
6、编译链接代码时,有两种存储代码和数据的字节顺序,⼀种是⼩端对齐,另⼀种是⼤端对齐。
7、构建嵌⼊式系统开发环境的⼯具链有多种,其中开放源码的⼯具链是GNU⼯具链,ARM公司提供的⼯具链是ADS⼯具链计算机有CISC和RISC两种类型,以ARM微处理器为核⼼的计算机属于RISC类型,其指令长度是定长的8、⽬前使⽤的嵌⼊式操作系统主要有哪些?请举出六种较常⽤的。
Windows CE/Windows Mobile、VxWork、Linux、uCos、Symbian、QNX任选六9、Boot Loader在嵌⼊式系统中主要起什么作⽤?完成哪些主要的⼯作?答:Boot Loader是在嵌⼊式系统复位启动时,操作系统内核运⾏前,执⾏的⼀段程序。
通过Boot Loader,初始化硬件设备,建⽴内存和I/O空间映射图,为最终加载操作系统内核调整好适当的系统软硬件环境。
1、电路如图1所示,计算β大于多少时晶体管饱和?(7分)解:取三极管饱和时集射极电压为0.4V ,基射极电压为0.7V , 则基极电流 Ib= (5-0.7)/100 mA射极电流Ie = (5-0.4)/1 mA要是三极管饱和,则Ie = Ib*β,解得β= 107所以,当β〉107时晶体管饱和。
图12、电路如图2所示,集成运放输出电压的最大幅值为±14V ,请填表。
(8分)图23、已知CMOS 边沿触发器(上升沿触发)输入端D 和时钟信号CP 的电压波形如图3所示,假定触发器的初始状态为Q=0,请画出Q 、/Q 端对应的电压波形。
(10分)图3uI (V ) 0.1 0.5 1.0 1.5uo1(V ) 1.1 5.5 11 14 uo2(V ) -1 -5 -10 -14 321Rb 100K4、图4所示是一个Feedback(反馈振荡)电路,请简述其工作过程。
(10分)图4解:假设出示状态U1为高电平输出。
U1为高,通过电阻R对C充电,电容C电压U2上升,上升至一定电压值(施密他触发器ST上限阀值),ST 输出电压Ust翻转为高电平,经非门后变为低电平输出(U1)。
U1为低,电容C通过电阻R放电,电容C电压U2下降,下降至一定电压值(施密他触发器ST下限阀值),ST输出电压Ust翻转为低电平,经非门后变为高电平输出(U1)。
如此反复,形成振荡。
5、用一款你熟悉的单片机设计一4*4键盘、2位7段共阴极数码管的单片机最小系统(系统可以工作),请画出原理图;程序不断扫描按键,如果有按键按下,则将对应的按键值显示到数码管上,请画出程序流程图.(15分)解略6// 程序功能:搜索字符串中的非数字字符,并将非数字字符打印出来#include <stdio.h>#define SIZE 10; // 第一处错误,语法错误,define后不能带“;”bool IsNumber(char ch){return( (ch <= '9') && (ch >= '0') );}int main(void){char c[SIZE] = "12345y789";int i;bool Result;for(i = 0; i < SIZE; i++)//第二处错误,逻辑错误,for语句后需加“{……}”return 0;}7、请列举常用的串行通信方式(两种以上),并简述串行通信和并行通信不同之处、优缺点。
嵌入式系统基础知识考试(答案见尾页)一、选择题1. 嵌入式系统的核心是什么?A. 中央处理器(CPU)B. 内存(RAM)C. 输入输出设备D. 操作系统和软件2. 嵌入式系统的显著特点包括:A. 低功耗B. 高性能C. 可定制性D. 上下文感知3. 在嵌入式系统中,通常使用哪种编程语言进行开发?A. 汇编语言B. C语言C. JavaD. Python4. 嵌入式系统通常用于哪些领域?A. 消费电子产品B. 工业控制系统C. 汽车电子D. 以上都是5. 下列哪个不是嵌入式系统的组成部分?A. 微控制器(MCU)B. 存储器C. 显示屏D. 键盘和鼠标6. 在嵌入式系统设计中,硬件和软件是如何相互作用的?A. 硬件负责数据处理和控制,软件负责程序执行和用户交互。
B. 软件负责硬件管理,硬件负责数据存储和处理。
C. 硬件和软件完全独立,互不干扰。
D. 硬件和软件相互依赖,共同工作。
7. 嵌入式系统中的实时性是指什么?A. 系统能够在预定时间内响应外部事件。
B. 系统能够处理大量数据。
C. 系统具有高度可扩展性。
D. 系统具有高可靠性。
8. 在嵌入式系统开发过程中,调试是一个重要环节。
常用的调试方法有哪些?A. 使用调试器B. 使用打印语句C. 使用模拟器D. 以上都是9. 嵌入式系统的低功耗设计通常涉及哪些方面?A. 选择低功耗的微处理器B. 优化代码以减少能耗C. 使用高效的电源管理模块D. 以上都是10. 在嵌入式系统应用中,如何确保系统的安全性和可靠性?A. 使用高质量的组件和材料B. 定期进行系统更新和维护C. 实施严格的安全措施,如防火墙和加密技术D. 以上都是11. 嵌入式系统的基本工作原理是什么?A. 单任务处理B. 多任务处理C. 实时处理D. 分布式处理12. 嵌入式系统的硬件通常包括哪些组件?A. CPU、内存、I/O设备B. CPU、内存、操作系统C. CPU、内存、软件D. CPU、内存、网络接口卡13. 下列哪个不是嵌入式系统的特点?A. 低功耗B. 高性能C. 紧凑的存储空间D. 可靠性高14. 在嵌入式系统中,常用的操作系统有哪些?A. Windows CEB. LinuxC. VxWorksD. all of the above15. 嵌入式系统中的软件通常分为哪几类?A. 系统软件和应用软件B. 驱动程序、中间件和应用软件C. 系统软件、中间件和应用软件D. 操作系统、驱动程序和应用软件16. 在嵌入式系统的开发过程中,常用的编程语言有哪几种?A. CB. C++C. JavaD. Python17. 嵌入式系统在智能家居中的应用有哪些?A. 智能家电控制B. 安全监控C. 能源管理D. 上述所有18. 在设计嵌入式系统时,需要考虑的主要因素有哪些?A. 性能、成本、可用性B. 成本、功耗、安全性C. 性能、功耗、安全性D. 性能、成本、安全性19. 嵌入式系统的特点是?A. 高度集成B. 高速运行C. 易于维护D. 以上都是20. 嵌入式系统中的“嵌入式”一词指的是什么?A. 系统可以嵌入其他系统中B. 系统可以独立运行C. 系统体积小,适合嵌入其他设备中D. 系统对外部环境敏感21. 在嵌入式系统中,哪种类型的存储器通常用于存储程序和数据?A. 随机存取存储器(RAM)B. 只读存储器(ROM)C. 闪存(Flash Memory)D. 硬盘驱动器(HDD)22. 嵌入式系统开发中常用的编程语言有哪几种?A. C语言B. C++C. JavaD. Python23. 在嵌入式系统设计中,硬件和软件的协同工作是非常重要的。
招聘嵌入式软件开发岗位笔试题及解答(某大型国企)(答案在后面)一、单项选择题(本大题有10小题,每小题2分,共20分)1、在C语言中,volatile关键字的主要作用是什么?A. 使变量成为全局变量B. 告诉编译器该变量可能会被外部因素改变,从而阻止优化C. 使变量成为常量D. 加快变量访问速度2、关于ARM架构处理器,以下哪个描述是正确的?A. ARM架构处理器仅支持32位指令集B. 所有的ARM处理器都支持Thumb-2技术C. ARM处理器采用的是RISC设计理念D. ARM处理器不能运行Linux操作系统3、嵌入式软件开发岗位笔试题及解答(某大型国企)一、单项选择题(每题2分,共20分)3、以下哪个不是嵌入式系统设计中常用的实时操作系统(RTOS)?A. VxWorksB. LinuxC. FreeRTOSD. Windows CE4、在嵌入式软件开发中,以下哪个概念不是用于描述硬件和软件之间接口的标准?A. 总线协议B. 寄存器映射C. 驱动程序D. API5、在ARM架构中,哪个寄存器通常被用作链接寄存器来保存子程序返回地址?A. R0B. R13 (SP)C. R14 (LR)D. R15 (PC)6、关于嵌入式系统的实时性,下列说法正确的是:A. 实时系统必须保证所有任务都能在指定的时间内完成B. 实时系统仅关注任务的平均响应时间C. 软实时系统对响应时间的要求比硬实时系统更加严格D. 实时系统中,任务的优先级可以根据任务的紧迫程度动态调整7、以下哪个协议不属于嵌入式系统中常用的网络通信协议?A. TCP/IPB. CAN(Controller Area Network)C. BluetoothD. SPI(Serial Peripheral Interface)8、在嵌入式软件开发中,以下哪个概念通常用来描述硬件和软件之间的接口?A. 驱动程序B. 硬件抽象层(HAL)C. 用户界面(UI)D. 操作系统内核9、在嵌入式系统开发过程中,以下哪种编程语言通常被认为最适合用于硬件抽象层(HAL)的开发?A. JavaB. C++C. CD. Python 10、以下关于ARM架构的描述,哪一项是正确的?A. ARM架构是一种RISC(精简指令集计算机)架构。
1.在嵌入式系统中,常用于存储启动代码和关键数据的存储器类型是?
A.SRAM
B.DRAM
C.Flash存储器(答案)
D.SDRAM
2.下列哪项不是嵌入式操作系统的特点?
A.实时性强
B.可裁剪
C.资源丰富,占用空间大(答案)
D.可靠性高
3.在嵌入式系统开发中,用于描述硬件设备的结构和功能的语言是?
A.C语言
B.HDL(硬件描述语言)(答案)
C.Java
D.Python
4.下列哪种通信接口在嵌入式系统中常用于低速、短距离的数据传输?
B
B.SPI(答案)
C.Ethernet
D.HDMI
5.嵌入式系统开发中,常用于调试和程序下载的接口是?
A.GPIO
B.UART(答案)
C.I2C
D.PWM
6.下列哪项不是嵌入式系统设计中需要考虑的实时性因素?
A.响应时间
B.吞吐量
C.延迟时间
D.代码美观性(答案)
7.在嵌入式Linux系统中,用于管理系统资源和提供程序运行环境的层是?
A.Bootloader
B.Kernel(答案)
C.Filesystem
D.Shell
8.下列哪种工具不是嵌入式系统开发中常用的交叉编译工具?
A.arm-linux-gcc
B.gcc(答案)
C.arm-none-eabi-gcc
D.x86_64-linux-gnu-gcc。
嵌入式考试题目及答案一、单选题(每题2分,共20分)1. 嵌入式系统是指()。
A. 嵌入到其他系统中的专用计算机系统B. 嵌入到其他系统中的通用计算机系统C. 嵌入到其他系统中的操作系统D. 嵌入到其他系统中的硬件系统答案:A2. 以下哪个不是嵌入式系统的典型应用领域?()A. 消费电子B. 工业控制C. 航空航天D. 个人电脑答案:D3. 在嵌入式系统中,以下哪个不是常用的处理器类型?()A. 微控制器(MCU)B. 数字信号处理器(DSP)C. 微处理器(MPU)D. 网络处理器(NP)答案:D4. 以下哪个不是嵌入式系统的开发工具?()A. 编译器B. 调试器C. 仿真器D. 打印机答案:D5. 在嵌入式系统中,以下哪个不是操作系统的功能?()A. 任务调度B. 内存管理C. 文件系统D. 网络通信答案:D6. 以下哪个不是嵌入式系统的硬件组成?()A. 处理器B. 存储器C. 输入/输出设备D. 显示器答案:D7. 在嵌入式系统中,以下哪个不是软件组成?()A. 操作系统B. 应用程序C. 驱动程序D. 打印机驱动答案:D8. 以下哪个不是嵌入式系统的开发流程?()A. 需求分析B. 系统设计C. 编码D. 测试答案:D9. 在嵌入式系统中,以下哪个不是调试技术?()A. 断点B. 单步执行C. 代码覆盖率分析D. 性能优化答案:D10. 以下哪个不是嵌入式系统的可靠性要求?()A. 容错性B. 可预测性C. 可维护性D. 可扩展性答案:D二、多选题(每题3分,共15分)11. 嵌入式系统的特点是()。
A. 实时性B. 专用性C. 可扩展性D. 低功耗答案:ABD12. 嵌入式系统的开发工具包括()。
A. 编译器B. 调试器C. 仿真器D. 打印机答案:ABC13. 嵌入式系统的硬件组成包括()。
A. 处理器B. 存储器C. 输入/输出设备D. 显示器答案:ABC14. 嵌入式系统的软件组成包括()。
嵌入式笔试题从应用对象上加以定义,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。
国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
下面就由小编为大家介绍一下嵌入式笔试题的文章,欢迎阅读。
嵌入式笔试题篇11:用C语言实现大小端的测试Int CheckCpu{union{int a;char b;}c;c.a=1;if(c.b==1)printf(“小端”);else printf(“大端”);}2:volatile的作用有哪些?Volatile第一变量相当于告诉编译器这个变量的值会随时发生变化,每次使用之前都要去内存里从新读取它的值,并不要随意针对它做优化,主要用在:1:一个中断子程序中会访问到的非自动变量;2:多线程应用中被几个线程共享的变量;3:并行设备的硬件寄存器。
3:C语言中static关键字的作用有哪些?1:在函数体中,一个被声明为静态的变量在这个变量在调用过程中维持其值不变;2:在模块内(但在函数体外),一个被声明为静态的变量,可以被这个模块内的所用函数使用,但不能被模块外的函数使用,它是一个本地的全局变量;3:在模块内,一个被声明为静态变量的函数,智能被这个模块内的函数调用;4:static全局变量与局部变量的区别:static全局变量只能被初始化一次,防止其他单元文件中被引用;5:static局部变量与局部变量的区别:static局部变量只能被初始化一次,下一次依据上一次结果的值;6:static函数与普通函数的区别:static在内存中只用一份,普通函数在每一次调用中维持一份拷贝。
4:请问下面三种变量的区别:Int const *p : 指向常整型的指针;Int *const p; 指向整型的常指针;Int *const *p:指向常整型的常指针;5:在ARM系统中,在函数调用的时候,参数是通过哪种方式传递的。
嵌入式工程师笔试题目嵌入式工程师笔试题目嵌入式工程师是指具有C/C++语言、汇编语言等基础,熟悉模拟电子技术等硬件知识,了解处理器体系结构,做嵌入式系统设计和开发,包括硬件系统的建立和相关软件开发、移植、调试等工作的人,下面就是整理的嵌入式工程师笔试题目,请看:嵌入式工程师笔试题目【1】1、一根金条长31厘米,如果把它切成数段,使其中的一段或几段能够接成长为1到31中任何整数的金条,请问要切几次?A.4B.5C.6D.7参考答案:A2、运行在多核处理器上的Linux环境中,若临界区非常短,且不允许线程上下文切换的情况下,使用下列哪种机制满足上述需求并且性能最好?A.SpinLockB.MutexC.SemaphoreD.Condition variable参考答案:A3、以下程序输出的结果是()#includeint main(){int x=10,y=10;printf("%d %d",x--,--y);}A.10 10B.9 9C.9 10D.10 9参考答案:D4、下面所述步骤中,不是创建进程所必须的步骤是?A.由调度程序为进程分配CPUB.建立一个进程控制块C.为进程分配内存D.将进程控制块链入就绪队列参考答案:A5、下面描述中,表达正确的有()A.公有继承是基类中的public成员在派生类中仍是public的B.公有继承是基类中的'private成员在派生类中仍是private的C.公有继承是基类中的protected成员在派生类中仍是protected的D.私有继承是基类中的public成员在派生类中仍是private的参考答案:ACD6、int listen(SOCKET s, int backlog);该函数中第二个参数的含义是?A.是否打开log信息B.是否打开后台log信息C.后台等待连接队列的最大限制值D.后台等待连接队列的最小限制值参考答案:C7、Java程序中的类名称必须与存放该类的文件名相同。
1.请问TCP/IP协议分为哪几层?FTP协议属于哪一层?答:可以分为物理层,数据链路层,网络层,传输层,应用层应用层:应用程序间沟通的层,如简单电子传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
传输层:在此层中,它提供了节点间的数据传送,应用程序之间的通信服务,主要功能是数据格式化、数据确认和丢失重传等。
如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。
互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。
如ARP是地址解析协议,在这一层的时候吧IP地址转换为物理地址网络接口层(主机-网络层):接收IP数据报并进行传输,从网络上接收物理帧,抽取IP数据报转交给下一层,对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。
另外补充一下OSI的七层所对应的协议:应用层(Application):应用程序网关(application gateway)Telnet: 远程登录(在应用层连接两部分应用程序)FTP(File Transfer Protocol):文件传输协议HTTP(Hyper Text Transfer Protocol):超文本传输协议SMTP(Simple Mail Transter Protocol):简单传输协议POP3(Post Office Ptotocol):邮局协议SNMP(Simple Network Mangement Protocol)简单网络管理协议DNS(Domain Name System):域名系统传输层(Transport):传输网关(transport gateway)TCP(Transmission Control Potocol):传输控制协议(在传输层连接两个网络)UDP(User Data Potocol):用户数据协议网络层(Internet):多协议路由器(multiprotocol router)IP(Internet Protocol):网络协议(在异构网络间转发分组)ARP(Address Resolution Protocol):地址解析协议RARP(Reverse Address Resolution Protocol) :逆地址解析协议ICMP(Internet Control Message Protocol):因特网控制消息协议IGMP(Internet Group Manage Protocol):因特网组管理协议BOOTP (Bootstrap):可选安全启动协议数据链路层(Data Link):网桥(bridge)交换机(switcher)HDLC(High Data Link Control):高级数据链路控制(在LAN之间存储-转发数据链路针)SLIP(Serial Line IP):串行线路IPPPP(Point-to-Point Protocol):点到点协议802.2等物理层(Physical):中继器(repeater)集线器(hub)(放大或再生弱的信号,在两个电缆段之间复制每一个比特)再回过头来看,ftp是用tcp写的一个文件传输协议,明显就是在应用层了====================================================================2.在网络应用中,函数htons,htonl,ntohs,nt ohl的作用?htons:把短整型的主机字节顺序转变为网络字节顺序其它依次类推htons一般用来转变端口,htonl一般用来转IP网络字节顺序是先高位字节,再低位字节;主机字节顺序则视cpu而定干脆扩展一点#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<netinet/in.h>#include<sys/socket.h>#include<sys/types.h>int main(){char str[]="255.255.255.255";in_addr_t r1,r2,r3;struct in_addr inp;r1=inet_addr(str);if(r1==-1){printf("inet_addr return -1 when 255.255.255.25 5\n");}else{printf("inet_addr:ip=%lu\n",ntohl(r1));}r2=inet_network(str);if(r2==-1){printf("inet_network return -1 when 255.255.255.2 55\n");}else{printf("inet_network:ip=%lu\n",r2);}r3=inet_aton(str,&inp);if(r3==0){printf("inet_aton return -1 when 255.255.255.255\n ");}else{printf("inet_aton:ip=%lu\n",ntohl(inp.s_addr));}return 0;}====================================================================3.在c语言中,static函数与普通函数有什么区别?1. 全局静态变量在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。
1)存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)。
2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)。
3)作用域:全局静态变量在声明他的文件之外是不可见的。
准确地讲从定义之处开始到文件结尾。
定义全局静态变量的好处:<1>不会被其他文件所访问,修改。
<2>其他文件中可以使用相同名字的变量,不会发生冲突。
2. 局部静态变量在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。
1)存中的位置:静态存储区。
2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)。
3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。
注:当static用来修饰局部变量的时候,它就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区。
考试,大提示局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在存当中,直到程序结束,只不过我们不能再对他进行访问。
当static用来修饰全局变量的时候,它就改变了全局变量的作用域(在声明他的文件之外是不可见的),但是没有改变它的存放位置,还是在静态存储区中。
3. 静态函数在函数的返回类型前加上关键字static,函数就被定义成为静态函数。
函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。
定义静态函数的好处:<1> 其他文件中可以定义相同名字的函数,不会发生冲突。
<2> 静态函数不能被其他文件所用。
存储说明符auto,register,extern,static,对应两种存储期:自动存储期和静态存储期。
auto和register对应自动存储期。
具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。
关键字extern和static用来说明具有静态存储期的变量和函数。
用static声明的局部变量具有静态存储持续期(static storage duration),或静态围(static extent)。
虽然他的值在函数调用之间保持有效,但是其名字的可视性仍限制在其局部域。
静态局部对象在程序执行到该对象的声明处时被首次初始化。
扩展分析:术语static有着不寻常的历史.起初,在C中引入关键字static是为了表示退出一个块后仍然存在的局部变量。
随后,static C中有了第二种含义:用来表示不能被其它文件访问的全局变量和函数。
为了避免引入新的关键字,所以仍使用static关键字来表示这第二种含义。
最后,C++重用了这个关键字,并赋予它与前面不同的第三种含义:表示属于一个类而不是属于此类的任何特定对象的变量和函数(与Java中此关键字的含义相同)。
写个例子,比对一下#include <stdio.h>#include <stdlib.h>extern int a;//声明static int b=5;a=0;//初始化void func1(){printf("a=%d;b=%d\n",a,b);return ;}void func2(){static int i=333;i++;printf("i=%d\n",i);return ;}int main(){a=20;func1();func2();func2();return 0;}输出为:a=20;b=5i=334i=335总的来说,静态的东西就是只在本文件中可见,而且在本文件中保持,它只初始化一次,存在静态存储区中,再对它进行初始化不会引起错误,但是没有用了====================================================================4.请实现存复制函数void memcpy(void *dst,void *src,int size)?网上搜了一下void *MyMemCopy(void *dest,const void *src,size_t count){char *pDest=static_cast<char *>(dest);const char *pSrc=static_cast<const char *>(src);if( pDest>pSrc && pDest<pSrc+count ){for(size_t i=count-1; i<=0; ++i){pDest[i]=pSrc[i];}}else{for(size_t i=0; i<count; ++i){pDest[i]=pSrc[i];}}return pDest;}哎,搞IT真的没有前途,你看,人都这么聪明的?!就这还考虑到了,幸好,我还不是笨到家,还能看得懂稍微解释下:如果是这个情况:src --------------------dst --------------------------说明两个在存区有重叠的地方。