分享

这两道题不会?你敢说你精通c语言

 昵称67168469 2019-11-09

多放点C语言的,我司走过校招,几乎所有高校毕业生C语言功底实在是…”

之前我们在做秋招笔试经分享系列时,有一位大厂研发工程师恳切留言。越是基础的东西,越容易忽视,题目看得懂,答案却怎么也想不起来。

不信看看下面的题:

问题1:问以下函数的输出结果?

这两道题不会?你敢说你精通c语言

C语言

问题2:问以下程序的输出结果是什么?

这两道题不会?你敢说你精通c语言

C语言

请在留言区评论,你知道答案吗?

纵观绝大部分的公司招聘硬件工程师的要求,我们发现公司对是否设计过开发板、是否掌握一种EDA工具,是否可以熟练掌握一种MCU,是否熟悉C语言编程及语法,这些都有明确的要求。

针对C语言编程及语法,我们专门用2个小时时间强化,在正在进行的17节毕设技能系列课程中,达尔闻邀请了资深嵌入式工程师陈强(现为高校老师)助力讲解。

重点讲解:C程序结构、嵌入式C与设备地址、数据类型、变量/常量、运算符、函数的用法、指针等。(点击原文查看完整)

◆ C程序结构

以STM32F103的标准库为例,先认识嵌入式C与设备地址。

嵌入式C开发的本质是对设备地址的操作:控制/数据寄存器:CPU功能,控制/数据寄存器:MCU外设、RAM:变量&堆栈、Flash:程序&常量、Flash首地址:复位&中断向量。

这两道题不会?你敢说你精通c语言

C语言

◆ 数据类型

1、基本数据类型

- char 字符型,占用一个字节,可以存放本地字符集中的一个字符

- int 整型,通常反映了所用机器中整数的最自然长度

- float 单精度浮点型

- double 双精度浮点型

2、限定符

- short int 16位整型 /long int 32位整型

- Signed 有符号 /unsigned 无符号

3、位、字节、字

1GB=1024MB 1MB=1024KB

1KB=1024Byte 1Byte=bit

4、内存编址以字节为单位

32位CPU支持的寻址空间为2^32Byte=4GB

5、用户自定义类型

如数组类型,结构体类型,函数类型等,最常用的如 typedef,struct

◆ 定义变量及使用范围

这两道题不会?你敢说你精通c语言

C语言

在上面的这段代码中,i为局部变量,先声明后使用,函数起始处,执行语句前声明仅在函数内部有效,不同函数可多次定义;count为全局变量,仅定义一次,使用前加extern 声明,所有函数可访问,可随意修改,有风险; j为静态变量,限定作用域于本文件或本函数使用,一直占用存储空间,不管函数是否被调用都不会消失。

◆ 定义常量

常量的分类:

- 数值常量,如125,-50

- 字符常量,如 ‘a’,转义字符

- 字符串常量,如”hello”,存储空间会多一个结束标记’’

- 符号常量,如宏定义#define,值不能改变也不能被赋值

- 枚举常量,常量值可自动生成,第一个为0,依次加1

下面的代码中,PI就被定义为常量,值为3.14159。

这两道题不会?你敢说你精通c语言

C语言

◆ 函数的声明及用法

这两道题不会?你敢说你精通c语言

C语言

定义函数:函数名是该函数在内存中的首地址,因此可以用函数名来调用执行该函数。函数参数不宜太多,参数多时可使用struct函数内使用全部变量有风险,尽量使用参数传递和返回值来和外界交互数据。

加C/C++学习交.流群获取C语言、C++、Windows高级编程,MFC框架编程、QT框架编程,Linux应用程序开发,Linux内核研究等系统学习路线,更有进阶干货的直播免费学习权限 ,都是大牛带飞 让你少走很多的弯路

函数声明:为了给编译器提供原型参考,编译时以进行参数的静态类型检查。函数声明放在调用之前,一般放在源文件开头或头文件中,即在源文件.c中定义函数,在头文件.h中声明。编译器编译程序时以源文件为单位,在哪个文件中调用就要在该文件中声明。

函数的调用机制:

调用一个函数时,系统发生进行如下动作:

(1)开辟该调用函数的栈空间

(2)将当前的运行状态压栈

(3)将返回地址压栈

(4)在栈内为传参分配空间

(5)在栈内为函数内局部变量分配空间,执行被调用函数

当被调用函数结束后,进行返回时,系统进行的动作刚好与函数调用时相反:

(1)释放栈内局部变量空间

(2)释放栈内传参空间

(3)退栈,得到返回地址,程序跳转调用处等待

(4)退栈,得到调用前运行状态,恢复调用前运行状态

(5)释放该调用函数栈空间

函数参数的传递方式:

这两道题不会?你敢说你精通c语言

C语言

◆ 指针与数组

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。

这两道题不会?你敢说你精通c语言

输出结果:i=2,*p=2。在上面的代码中, p=&i,表示指针变量p指向变量i,使用&取地址运算符进行关联的;代码*p=*p+1表示改变指针变量p指向的变量的值,使用的*指针运算符间接访问变量i。

数组在创建时,我们必须定义数组的类型和大小,数组的大小不能为0,数组中的元素类型都是相同的。

&grade[3]=&grade[0] + 3 * 4

上面表达式的含义是gradep[3]的地址等于grade[0]地址加上12。写成以下的通式:数组中下标为N元素的地址 = 数组的首地址 + N * sizeof(DataType)

例如:

这两道题不会?你敢说你精通c语言

C语言

以上我们介绍了C语言中最基础,但也是最重要的部分,只有掌握这些定义、用法,在我们设计过程中才不会出错。

这两道题不会?你敢说你精通c语言

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多