/ 字符串处理函数 /

stract函数   字符串连接函数

例:printf(“%s”, stract(str1, str2));

strcpy(字符串或字符数组名)和strncpy  字符串复制函数

例:strcpy (str1, str2);   作用是把字符串2复制到字符串1去。

例:strncpy(str1, str2, 2);  作用是将str2中的前两个字符取代str1的前两个字符

strcmp(字符串1, 字符串2); (也可以吧字符串换成字符数组名)  字符串比较函数

将两个字符串自左向右逐个字符相比(按ASCII码值进行大小比较),直至出现/0为止

1.如果全部字符相同,则认为两个字符串相同

2.如果出现不同字符,则以第一对不相同的字符的比较结果为准。

strlen(字符数组名或字符串常量)   测试字符串长度的函数

strlwr(字符串)  将字符串中的大写字符换成小写字母

strupr(字符串)  将字符串中的小写字母换成大写字母

/ 用函数实现模块化程序设计 /

定义函数的方法

定义无参函数

类型名 函数名()

函数体

或者

类型名 函数名(void)

函数体

定义有参函数

类型名 函数名(形式参数表列)

函数体

定义空函数

类型名 函数名()

{ }

它什么工作都不做,只是为了方便以后 写函数来代替它

函数的返回值

通过return获得返回值,例如

max(int x, int y)

{

return(x>y?x:y);

}

定义函数的时候就应该制定函数的类型

Int max(float x, float y)

不带返回值的函数,应当用定义函数为“void类型”,即“空类型”,此时在该函数中不得出现return语句

对被调用的函数的声明

函数类型 函数名(参数类型1 参数名; 参数类型2 参数名;。。。。参数类型n 参数名n)

或者

函数类型 函数名(参数类型1; 参数类型2; 。。。。参数类型n)

C语言定义函数时,一个函数内不能再定义另外一个函数,

但可以嵌套调用函数

函数的递归调用:直接或间接的调用该函数本身

数组作为函数参数

数组是一个整体,在内存中连续易断存储单元

数组元素作为函数实参:数组传递到方向是从实参传到形参,单向传递

一维数组名作为函数参数:数组名作函数实参时向形参(数组名或指针变量)传递的是数组首元素的地址,即他们公共占用同一个存储单元

形参可不指定大小,但实参一定要指定

二维数组名作为函数参数:形式参数数组定义时可以指定每一维的大小,也可以省略第一维的大小说明,即不可省略第二维及其他高维的大小说明

例如:

当实参定义 int score[5][10]

形参可定义为 int score[ ][10]或int score[5][10]

定义变量的3种情况

1.在函数开头定义

2.在函数内的符合函数内定义

3.在函数的外部定义

在一个函数内部定义的变量只在本函数范围内有效

复合语句内定义的变量只在本复合语句的范围内有效

主函数内定义的变量也只有在主函数内部有效

全局变量

在函数之外定义的函数称为外部变量,外部变量是全局变量

全局变量的有效范围为从定义变量的位置开始到本源文件结束

不在必要时不使用全局变量

同一个源文件中,全局变量与局部变量同名,在局部变量的作用范围内,局部变量有效,全局变量被“屏蔽”,即它不起作用。

变量的存储方式和生存期

变量存储的两种方式:静态存储方式动态存储方式

静态存储方式是指在程序运行期间由固定的存储空间的方式

动态存储方式是在程序运行期间根据需要进行动态的分配存储空间的方式

在c语言中每一个变量和函数都有两个属性:数据类型数据的存储类别

C的存储类别有四种:自动的(auto)、静态的(static)、

寄存器的(register)、外部的(extern)

1.自动变量(auto变量)

函数中的局部函数,如果不专门声明为static存储类别,则数据都是储存在动态存储区中(不写auto则隐含指定为自动变量)

2.静态局部变量(static局部变量)

有时希望函数中的局部变量的值在函数调用结束后不消失,即其占用 的存储单元不释放,在下一次再调用该函数时,该变量已有值((维持上一次函数调用结束时的值)

3.寄存器变量(register变量)

变量(包括静态存储方式和动态存储方式)的值是存放在内存中的。如果有一些变量使用频繁(例如要用10000次),则为存取变量的值要花费不少的时间,为提高执行效率,允许将局部变量的值放在cup中去存取,需要时直接从寄存器中取出参加运算,即可提高效率。这种变量叫做寄存器变量,

用register作声明,例如

register int f;

全局变量都是存储在静态存储区当中的,一般来说外部变量是在函数的外部定义的全局变量,它的作用域是从变量的开始处开始,到本程序文件的末尾

在一个文件内扩展外部变量的作用域,应该在引用之前用关键字extern对该变量做“外部变量声明”

如果一个程序包含两个文件,在两个文件中都要用到同一个外部变量Num时,不能在两个文件中各自定义一个外部变量Num,否则在进行程序的链接时会出现“重复定义”的错误。正确的做法是在一个文件中定义外部变量Num,而在另一个文件中用extern对Num作“外部变量声明”,即“extern Num”

有时希望在程序设计中某些外部变量只限于被本文件引用(避免出现重复定义的错误),而不能被其他文件引用,则可以在定义外部变量时加一个static声明,在若干人分别完成各个模块,个人可以独立地在其设计的文件中使用相同的外部变量名。例如

Static int A;

用static声明一个变量的作用是:

1.对局部变量用static声明,把它分配在静态存储区,该变量在整个程序执行期间不释放,其所分配的空间始终存在。

2.对全局变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。

关于变量的声明和定义

一个函数一般由两部分组成:声明部分执行语句。声明的部分作用是对有关的标识符(如变量、函数、 结构体、共用体等)的属性进行声明。对于函数而言,函数的声明是函数的原型而函数的定义是对函数功能的定义。对被调用函数的声明是放在主调函数的声明部分中的,而函数的定义时一个独立的模块。

对于变量而言,声明部分出现的变量有两种情况:一种是建立存储空间的(如“int a;”),一种是不需要建立存储空间的(如“extern a;”)。前者称为定义性声明,简称定义;后者称为引用性声明。

广义地说,声明包括定义,但并非所有的声明都是定义。

而为了方便叙述,把建立存储空间的声明称为定义,而把不需要建立存储空间声明的称为声明。

内部函数和外部函数

函数就是功能,每一个函数用来实现一个特定的功能。

内部函数:如果一个函数只能被本文件中的其他函数所调用在定义内部函数(又称静态函数)时,加static,例如

static 类型名 函数名(形参表)

外部函数:可供其他文件调用,例如

extern int  sum(int a,int b);

c语言规定,如果在定义函数时省略extern,也默认其是外部函数。

/ 指针 /

由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元,将地址形象化地称为“指针”

直接访问:直接按变量名进行的访问

间接访问:即将变量i的地址存放在另一个变量中,然后通过该变量来找到变量i的地址,从而访问变量。

指针变量:该变量专门用来存放另一个变量的地址,指针变量的地址(即指针)

&”  取地址运算符 (“&a”是变量a的地址)

“*”  指针运算符(“*p”代表指针变量 p指向的对象)

运用指针可以达到的效果

1、运用指针,可以在一个函数内部改变外部的变量

2、运用指针,可以实现函数“有多个返回值”

书第224页中的函数

void swap()

{

Int temp;

temp = *p1;

*p1 = *p2;

*p2 = temp;

}

如果把其中的*都不要,改成temp = p1;p1=p2;p2=temp;是不对的,c语言中实参变量和形参变量之间的数据传递是单向的“值传递”方式,用指针变量也遵循同样的规则,不可能通过执行调用函数来改变实参指针变量的值,但是可以改变实参指针变量所指变量的值。

通过指针引用数组

所谓数组元素的指针就是数组元素的地址

引用数组元素有下标法,例如“a[3]”也可以使用指针法。

使用指针法能使目标程序质量高(占内存更少,运行速度更快)

int a[5] ={1, 2, 3, 4, 5};

int *p;

P = &a[0];  //把a[0]元素的地址赋给指针变量p

C语言中,p = &a[0]p = a  是等价的。(因为在c语言中,数组名(不包括形参数组名)代表数组中首元素的地址)

/ 51单片机 /

12M的晶振,它的晶振频率是12Mhz,

它的时钟周期是(1/12)us,

它的状态周期是(2/12)us,

它的机器周期是(12/12)us.

实际情况下,delay函数里1大约要10微秒

时钟周期:为单片机提供时钟脉冲信号的震荡的周期

机器周期:一个机器周期包括12个时钟周期,在一个机器周期内,CPU可以完成一个独立操作。

浅谈延迟函数执行一次延迟多少秒以及跑马灯的感想_脱去三千烦恼丝-CSDN博客_delay50000是延时了多少毫秒

单片机延时问题20问

上面这两个可以进一步学习

P3.0   RXD串行口输入

P3.1   TXD串行口输入

P3.2   INT0外部中断0输入

P3.3   INT1外部中断1输入

P3.4   T0定时器0外部输入

P3.5   T1定时器1外部输入

P3.6   WR外部写控制

P3.7   RD外部读控制

中断

1.CPU在处理事件A时,发生了另一事件B的请求(中断请求);

2.CPU暂时中断当前的工作,转去处理事件B(中断响应中断服务);

3.待CPU处理完事件B后,再回到原来事件A被中断的地方继续处理事件A。

各中断允许控制位=0,开关断开;  =1,开关接通;

中断函数的写法

void 函数名()interrupt 中断信号

{

   

三极管:是一种控制电流的半导体器件,其作用是把微弱信号放大成幅度值较大的电信号。

【单片机学习笔记】(6):字符串处理函数、变量的三种情况、用函数实现模块化程序设计、晶振与延时、指针相关推荐

  1. JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别

    JavaScript:学习笔记(7)--VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...

  2. Hibernate学习笔记_核心幵发接口及三种对象状态

    核心接口开发  (重点)                                                  一,  Configuration a)   AnnotationConfi ...

  3. AutoLeaders控制组——51单片机学习笔记(DS18B20温度传感器、LCD1602、直流电机+PWM)

    本篇内容是观看B站江科大自化协UP主的教学视频所做的笔记,对其中内容有所引用,并结合自己的单片机板块进行了更改调整. 以下笔记内容以一个视频为一个片段(内容较多,可能不适合速食,望见谅) 一些内容涉及 ...

  4. [单片机学习笔记](35):串级PID算法应用剖析、通过串口控制电机、MPU6050获取平衡车姿态、自制平衡车PID算法程序设计

    串级PID算法应用剖析 这是经过给队友讲解串级PID的程序的之后的进一步的理解总结. 内环的实际值,取决于你能测出什么值给内环.而内环的输入就是内环误差 内环的输出值,是内环误差(内环目标值-内环实际 ...

  5. AutoLeaders控制组—51单片机学习笔记

    文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...

  6. stm32正常运行流程图_STM32单片机学习笔记(超详细整理143个问题,学习必看)...

    原标题:STM32单片机学习笔记(超详细整理143个问题,学习必看) 1.AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备 2.Stm32f ...

  7. ESP32 单片机学习笔记 - 08 - WebSocket客户端

    前言,终于要到网络模型的最后一层,第四层,应用层,http.websocket的实践了. 文章目录 ESP32 单片机学习笔记 - 08 - WebSocket客户端 一.应用层协议 科普概念 二.编 ...

  8. ESP32 单片机学习笔记 - 03 - MCPWM脉冲输出/PCNT脉冲计数

    ESP32 单片机学习笔记 - 03 - MCPWM脉冲输出/PCNT脉冲计数 前言,继续上一篇的内容.因为上一篇刚好实验了iic和spi,形成一对.接下来讲pwm另起一篇. 目录 ESP32 单片机 ...

  9. JavaScript学习笔记(四)---闭包、递归、柯里化函数、继承、深浅拷贝、设计模式

    JavaScript学习笔记(四)---闭包.递归.柯里化函数.继承.深浅拷贝.设计模式 1. 匿名函数的使用场景 2.自运行 3.闭包 3.1前提: 3.2闭包 4.函数对象的三种定义方式 5.th ...

最新文章

  1. 常见的数据结构——栈、队列、数组、链表和红黑树
  2. 计算机网络·片偏移练习题
  3. 招程序员,得招 “会编程” 的
  4. 台湾大学林轩田机器学习技法课程学习笔记5 -- Kernel Logistic Regression
  5. 比较两个时间字符串的大小
  6. C# 引用类型的对象克隆(深拷贝)。
  7. m苹果放n篮子_egg appple千万别翻译为“鸡蛋苹果”,老外听到会懵圈的
  8. break continue区别和用法_因为不知道break和contiue的核心区别,他在初试就被刷了下来...
  9. 电子工程可以报考二建_二建报考要求是工程类专业怎么办?非工程类专业可以报名吗?...
  10. 挂***方法和技巧大汇总
  11. Win10彻底关闭Antimalware Service Executable占用内存过高问题
  12. 【Android 应用开发】GitHub 优秀的 Android 开源项目
  13. python 空白行_python去掉空白行的多种实现代码
  14. IMO2019 D1T1解答
  15. 这是一个猜数字的游戏。判断输入的第1个字符,略过其余的字符。
  16. github使用教程linux,GitHub Linux下使用方法
  17. 1007. Maximum Subsequence Sum (25)-PAT甲级真题(最大连续子序列和、动态规划dp)
  18. Android通过DownloadManager实现App的版本更新功能
  19. Android学习笔记Android必备开发工具之一命令行创建Git库
  20. crawlspider类的使用

热门文章

  1. Hello world,Hello 2015,Bye 2014
  2. 今日头条推荐算法原理全文详解之一
  3. DDD领域驱动设计-视频讲解+实战
  4. android快速充电实现_手机充电ic介绍以及怎么用充电IC实现手机快速充电
  5. Excel对整体数据定位相同的背景颜色单元格?
  6. ie浏览器点击F12没反应
  7. 【3D打印机】原来配置Marlin2.0这么简单,别说我没告诉你。
  8. 基于Python的GUI图形用户界面编程
  9. 微信公众号post方法Java_Java HttpClient 如何伪装微信浏览器进行POST请求
  10. 深入浅出理解数据分析系列之:Python安装Excel文档库openpyxl和Pycharm为项目安装Excel文档库openpyxl