C语言常见问题

发布者:WhisperingHeart最新更新时间:2024-08-02 来源: cnblogs关键字:C语言  常见问题  单片机 手机看文章 扫描二维码
随时随地手机看文章

1、嵌入式与单片机的区别

从软件上,行业里经常把芯片中不带MMU(Memory  Management  Unit内存管理单元)从而不支持虚拟地址,只能裸奔或运行RTOS(实时操作系统,例如ucos、华为LiteOS、RT-Thread、FreeRTOS)的system,叫做单片机(例如STM32、NXP)

而把芯片自带MMU可以支持虚拟地址,能够跑Linux、Vxworks、WinCE、Android这样的“高级”的system,叫做嵌入式

 

2、Heap(堆)和Stack(栈)的区别

Heap(堆)上的空间是手动分配和释放的,Stack(栈)上的空间是自动分配和释放的

 

3、全局变量和局部变量的区别

1、作用域不同:全局变量作用域为整个程序,局部变量的作用域为当前语句块;

2、内存存储方式:全局变量在全局数据区(静态数据区),局部变量存储在栈上;

3、生命周期不同:全局变量的生命周期和程序周期一样,局部变量随着语句块的结束而结束;

4、当局部变量和全局变量同名时,优先使用局部变量,使用全局变量是要用域成员运算符;

 

4、结构体和联合体的区别

1、结构体和联合体都是由不同的数据类型组成,但在任何时候,联合体只存在一个被选中的成员,结构体的所有成员都存在;

2、在结构体中,各成员占有自己的存储空间,总大小等于各成员的大小之和;

3、在联合体中,所有成员共用一块存储空间,其大小等于联合体中最大成员的大小;

 

5、数组和指针的区别

1、指针要么在静态存储区,要么在栈上被创建。数组名对应着一块内存,其容量与地址在生命周期内保持不变;

2、指针可以随时指向任意类型的内存块,它的特征是可变,比数组灵活,但也危险;

 

6、指针函数和函数指针的区别

1、指针函数是一个函数,它返回值是一个指针;

2、函数指针是一个指针,这个指针所指的对象是一个函数;

 

7、常量与变量的区别

1、常量是只读不可写,变量可读可写;

2、常量必须初始化,变量可以不初始化;

3、常量不可以寻址,它的地址不可赋给非常量指针,变量可以寻址;

 

8、指针自增自减与变量自增自减有什么区别

指针自增自减是改变指针所指的对象;变量自增自减是改变变量的值。

 

9、#error的作用是什么

编译程序时,只要遇到#error就会跳出一个编译错误

 

10、#include 与#include “file.h”有什么区别

#include 表示该文件存在编译器指定的标准头文件存放处;#include “file.h”表示该文件在用户当前的工作目录下

头文件中的 ifdef /define    endif的作用:防止头文件被重复引用。

 

10、常见的条件语句比较写法

1、bool类型  if(flag)建议使用

2、int类型  if(value  !=  0)建议使用 

3、float   if( x  > -EPSION &&   x  < EPSION )建议使用

4、指针   if(p == NULL)建议使用,强调p为指针;不建议if(p == 0)会让人误解为int类型

 

11、用#define实现宏并求最大值最小值

 

#define    MAX(x,y)    ((x)>(y))?(x):(y) 
#define    MIN(x,y)    ((x)<(y))?(x):(y)

 

12、break语句与continue语句有什么区别

continue语句只能出现在循环语句中,表示结束本次循环;break语句还可以出现在switch语句中,表示结束switch语句。在循环语句内表示结束整个循环。

 

13、static关键字的作用

1、用于全局变量:表示该变量是静态全局变量。作用域为当前文件;

2、用于函数:该函数为静态函数,只能在本文件中调用。静态函数在内存中只有一份,普通函数在内存中维持一份拷贝;

3、用作局部变量:为静态局部变量,只初始化一次。之后调用函数都是上次函数退出时的值。即改变变量的生存周期为整个程序运行的时间段内;

4、static成员函数:表示这个函数属于此类而不属于此类的任何对象,不能访问非静态变量和函数,该函数在该类中是唯一的。

 

14、const关键字的作用

1、修饰一般变量和数组:修饰符可在类型说明符前,也可在类型说明符后;

2、修饰常指针:

const修饰指针指向的对象,指针可变,指针指向的对象不变

const  int  *A;

 

const修饰指针指向的对象,指针可变,指针指向的对象不变

int const  *A;

 

const修饰指针,指针不可变,指针指向的对象可变

int * const  A;

 

 

15、const与宏的区别

1、编译时刻:宏在预编译时刻,const在编译时刻;

2、编译检查:宏不会编译检查,const有编译检查

3、宏可以定义函数、方法等,const不可以

4、大量使用宏会导致预编译时间过长

 

16、带参宏与函数的区别

1、处理时刻不同:宏在编译时刻,函数在运行时刻;

2、带参宏没有参数类型,函数具有参数类型;

3、带参宏不分配内存,函数需要分配内存;

4、宏不占用运行时间,函数在调用时刻和返回时刻占用时间;

 

17、引用与指针的区别

1、非空区别:指针可以指向NULL,引用必须指向某个对象;

2、可修改区别:指针可以指向不同的对象,引用总是指向初始化的对象;

3、合法性区别:在使用指针之前要判断指针是否为NULL,引用不需要判断;

 

 

18、malloc()与colloc()的区别

1、malloc()与colloc()都是在堆上申请动态内存空间;

2、malloc()只有一个参数,即要分配内存大小;

3、colloc()函数有两个参数,分别是元素的个数与元素的大小;

4、malloc()不能对内存初始化,colloc()对内存的每一位初始化为0;

 

19、strcpy 、sprint、 memcpy函数的区别

 

strcpy 函数操作的对象是字符串,完成从源字符串到目的字符串的拷贝;

sprint函数操作的对象不限于字符串,是实现其他数据类型吸纳高字符串的转化。方法中需要指定数据源对象的数据类型,如果源对象是字符串,也可以实现字符串的拷贝功能。

memcpy内存的拷贝,实现将一个内存的内容复制到另一个内存块,内存块由首地址及长度决定。

 

20、strcpy函数为什么要返回char *类型

增加代码的灵活性,方便其他函数直接调用

 

21、new  delete与malloc  free的联系与区别

1、都是在堆上进行动态内存的分配与释放;

2、new  delete是C++的运算符,malloc  free是函数;

3、new会自动调用对象的构造函数,返回相应的类型;

4、malloc只会申请指定大小的内存,返回void *类型,不能初始化对象;

5、delete与new配对,会调用析构函数;

6、free与malloc配对,只是内存的释放,不会调用析构函数;

 

22、关于静态内存的分配和动态内存的分配的区别及过程

1、静态内存的分配是在编译时刻完成的,不占CPU资源。动态内存的分配是在运行时刻完成的,分配与释放占用CPU运行时间;

2、静态内存分配是在栈上完成的,动态内存分配是在堆上完成的;

3、动态内存分配需要指针或引用数据类型的支持,而静态内存分配不需要;

4、静态内存的分配是按照计划分配的,在编译前确定内存块的大小;动态内存分配运行时按需分配;

5、静态内存分配是把内存的控制权交给了编译器;动态内存分配是把内存的分配交给了程序员;

6、静态内存分配的效率比动态分配内存的效率高,因为动态内存的分配与释放需要额外的开销;动态内存管理水平,严重依赖于程序员的水平,处理不当容易造成内存泄漏

 

23、一个短小的函数在C与C++中分别用什么实现

在C中用宏实现,在C++中用内联函数实现

 

24、在C++程序中调用被C编译器编译后的函数,为什么要加extern C

C++语言支持函数的重载,C语言不支持函数的重载,编译后参数的名字不同,函数被C++编译器编译后产生的名字为函数名加参数列表类型名之类的名字。

而C编译器编译后产生的名字为函数名。

 

25、一个由C/C++编译器编译过的程序由哪几部分组成

1、栈区:由编译器自动编译、释放、存储函数参数的值、局部变量的值等,其操作方式类似于数据结构;

2、堆区:由程序员分配与释放,如果程序员没有释放,在程序结束时由OS释放,存储结构类似于链表;

3、全局变量和静态变量存储在一起

4、文字常量区:常量、字符串存放于此,程序结束后自动释放;

5、程序代码区:存放函数的二进制代码


关键字:C语言  常见问题  单片机 引用地址:C语言常见问题

上一篇:关于定时器、波特率、TH和TL值的计算
下一篇:RAM、SRAM、SDRAM、ROM、EPROM、EEPROM、Flash存储器概念

推荐阅读最新更新时间:2024-11-12 13:38

如何快速掌握一款MCU,可以从这几方面入手
任何一款MCU,其基本原理和功能都是大同小异,所不同的只是其外围功能模块的配置及数量、指令系统等。对于指令系统,虽然形式上看似千差万别,但实际上只是符号的不同,其所代表的含义、所要完成的功能和寻址方式基本上是类似的。因此,对于任何一款MCU,主要应从如下的几个方面来理解和掌握: MCU的特点:要了解一款MCU,首先需要知道就是其ROM空间、RAM空间、IO口数量、定时器数量和定时方式、所提供的外围功能模块、中断源、工作电压及功耗等等。 了解这些MCU Features后,接下来第一步就是将所选MCU的功能与实际项目开发的要求的功能进行对比,明确那些资源是目前所需要的,那些是本项目所用不到的。对于项目中需要用到的而
[单片机]
如何快速掌握一款<font color='red'>MCU</font>,可以从这几方面入手
学习ARM和单片机哪个更实用
一般在8位 单片机 与ARM方面的嵌入式系统是有层次上的差别,ARM适用于系统复杂度较大的高级产品,如PDA、手机等应用。而8位 单片机 因架构简单,硬件资源相对较少,适用于一般的工业控制、消费性家电等等。对于一个单片机方面的软件 编程 初学者,应以HOLTEK系列或8051等8位单片机来做入门练习。而初学者应当具备软件 编程 相关知识,单片机一般软件编程是以汇编语言为主,各家有各家的语法,但大都以RISC的单片机架构为主,其中 RISC (Reduced Instruction Set Computer) 代表单片机的所有指令。都是利用一些简单的指令组成的,简单的指令代表 单片机的线路可以尽量做到最佳化,而提高执行速率。另外初学
[单片机]
以AT89S52单片机为控制核心的数字频率计设计
在电子领域内,频率是一种最基本的参数,并与其他许多电参量的测量方案和测量结果都有着十分密切的测量精度。因此,频率的测量就显示得尤为重要,测频方法的研究越来越受到重视。频率计作为测量仪器的一种,常称为电子计数器,它的基本功能是测量信号的频率和周期,频率计的应用范围很广,它不仅应用于一般的简单仪器测量,而且还广泛应用于教学、科研、高精度仪器测量、工业控制等其他领域。随着微电子技术和计算机的迅速发展,特别是单片机的出现和发展,使传统的电子测量仪器在原理、功能、耗电、可靠性等方面都发生了重大的变化。目前,市场上有各种多功能、高精度、高频率的数字频率计,但价格不菲。为适应实际工作的需要,本文考虑以单片机(AT89 S52)为控制平台和一个1
[单片机]
以AT89S52<font color='red'>单片机</font>为控制核心的数字频率计设计
STM32单片机中Hex、Bin文件的区别及应用详解
STM32、51等单片机程序经过编译后,生成的hex文件、bin文件,它们都是单片机烧写文件,本文介绍它们的区别与应用。Hex文件Keil5中生成hex文件的配置 如上图,分别点击“魔术棒”-“Output选项卡”,勾选“Create HEX File”选项,确认即可。STM32CubeIDE中生成hex文件的配置 如上图,先用鼠标点击选中项目名,之后点击菜单栏“File”-“Properties”。 如上图红框处,依次点击“C/C++ Build”-“MCU Post build outputs”,勾选“Convert to Intel Hex file”,应用并关闭窗口。 hex烧写用ISP方式烧写程序,首先找来I
[单片机]
STM32<font color='red'>单片机</font>中Hex、Bin文件的区别及应用详解
PIC16F877A单片机led的动态显示
list p=16F877A,R=DEC include p16F877A.inc ;;;;;user variables;;;;;;;; Count2 equ 23H Count3 equ 24H data_out1 equ 25H data_out2 equ 26H ;;;;;;;reset vector;;;;;;;;; org 0x00 goto mainline ;;;;;;delay program;;;;;;; delay_2ms movlw 0x05 movwf Count2 lp0 movlw 0xff movwf Count3 lp1 decfsz Count3,F goto lp1 decfsz Count2
[单片机]
STM32系列微控制器标准外设库简单介绍
ST为了普及旗下产品,发布包括标准外设库在内的众多支持软件,有效降低开发门槛。作者使用ST的标准外设库大概两年时间,在这里介绍何为外设库: 外设库,是支持片上外设的函数,数据结构和宏的集合。外设库的精髓在于初始化结构体和初始化函数的配合使用,把外设的各类工作参数赋予初始化结构体,然后调用初始化函数将这些参数写入外设寄存器,完成外设的初始化。 外设库提供大量的状态获取,中断控制等函数,它们进行必要的检查之后,再操作外设,安全高效。 在开发过程中,程序员会频繁地从某个外设接收数据或者向某个外设发送数据,介于此外设库把这些函数全部封装完毕,格式统一,便于使用。 针对初学者,以下几个地方易错: 启动文件和外设头文件里面的MC
[单片机]
MCS-51系列单片机简介
MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列 单片机 的总称,这一系列 单片机 包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。INTEL公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求,其中89C51就是这几年在我国非常流行的单片机,它是由美国ATMEL
[单片机]
东芝将推出矢量控制引擎嵌入式微控制器
东京--(美国商业资讯)--东芝公司(Toshiba Corporation)(TOKYO:6502)今日宣布其ARM Cortex™-M3(注1)内核TX03系列产品中将再添一款矢量控制引擎嵌入式微控制器。该产品具有低引脚数量和宽引脚间距等特性,使降低贴装成本成为可能。新产品“TMPM372”将于2013年5月投入量产。 东芝一直在开发M370系列产品,该系列使用矢量控制引擎控制电机,如今广泛应用于从白色家电等消费品到工厂自动化在内的应用。随着这些产品价格的降低,成本重点除了微处理器等主要设备外,还将包括PCB和相关成本,包括贴装成本。灵活满足这些需求需要多种封装。 新产品“TMPM372FWFG”的特性与现有矢量控制引擎的
[工业控制]
东芝将推出矢量控制引擎嵌入式<font color='red'>微控制器</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved