您的位置:首页 > 运维架构 > Linux

苏嵌嵌入式linux实训第四天

2020-07-14 06:34 218 查看

主要学习内容 :
了解C语言概论,重要性,以及基本知识,查缺补漏
一.概述
1.C语言之父?丹尼斯里奇,1978 k&Ec–unix
2.C语言特点(优势)?.net–万德 C++/-.net C#
直接访问硬件
运行效率(运行时,解释性)
移植性
子问题<C语言为什么能够直接访问硬件>
指针类型 保存地址 (访问硬件的原因)
力扣
<嵌入式开发为什么选择C语言>
所有操作系统的内核都采用了C语言
直接访问硬件 运行效率
不要跟随潮流,要明白内核原因,有自己的理解和简介,C语言依旧很重要。
3.C语言的标准
K&RC 、C89、C99
语法标准
作业:C语言的语法标准详解
【K&R C】 1978 年,Dennis Ritchie 和 Brian Kernighan 合作推出了《The C Programming Language》的第一版(按照惯例,经典著作一定有简称,该著作简称为 K&R),书末的参考指南 (Reference Manual) 一节给出了当时 C 语言的完整定义,成为那时 C 语言事实上的标准,人们称之为 K&R C。从这一年以后,C 语言被移植到了各种机型上,并受到了广泛的支持,使 C 语言在当时的软件开发中几乎一统天下。

【C89 (ANSI C)】 随着 C 语言在多个领域的推广、应用,一些新的特性不断被各种编译器实现并添加进来。于是,建立一个新的“无歧义、于具体平台无关的 C 语言定义” 成为越来越重要的事情。1983 年,ASC X3(ANSI 属下专门负责信息技术标准化的机构,现已改名为 INCITS)成立了一个专门的技术委员会 J11(J11 是委员会编号,全称是 X3J11),负责起草关于 C 语言的标准草案。1989 年,草案被 ANSI 正式通过成为美国国家标准,被称为 C89 标准。
【C90 (ISO C)】 随后,《The C Programming Language》第二版开始出版发行,书中内容根据 ANSI C(C89)进行了更新。1990 年,在 ISO/IEC JTC1/SC22/WG14 (ISO/IEC 联合技术第 I 委员会第 22 分委员会第 14 工作组) 的努力下,ISO 批准了 ANSI C 成为国际标准。于是 ISO C(又称为 C90) 诞生了。除了标准文档在印刷编排上的某些细节不同外,ISO C(C90) 和 ANSI C(C89) 在技术上完全一样。
【C95】 之后,ISO 在 1994、1996 年 分别出版了 C90 的技术勘误文档,更正了一些印刷错误,并在1995 年通过了一份 C90 的技术补充,对 C90 进行了微小的扩充,经过扩充后的 ISO C 被称为 C95。
【C99】 1999 年,ANSI 和 ISO 又通过了最新版本的 C 语言标准和技术勘误文档,该标准被称为 C99 。这基本上是目前关于 C 语言的最新、最权威的定义了。
C99 标准引入了许多特性,包括内联函数(inline functions)、可变长度的数组、灵活的数组成员(用于结构体)、复合字面量、指定成员的初始化器、对IEEE754浮点数的改进、支持不定参数个数的宏定义,在数据类型上还增加了 long long int 以及复数类型。
毫不夸张地说,即便到目前为止,很少有C语言编译器是完整支持 C99 的。像主流的 GCC 以及 Clang 编译器都能支持高达90%以上,而微软的 Visual Studio 2015 中的C编译器只能支持到 70% 左右。
【C11】2007 年,C语言标准委员会又重新开始修订C语言,到了 2011 年正式发布了 ISO/IEC 9899: 2011,简称为 C11 标准。
C11标准新引入的特征尽管没 C99 相对 C90 引入的那么多,但是这些也都十分有用,比如:字节对齐说明符、泛型机制(generic selection)、对多线程的支持、静态断言、原子操作以及对 Unicode 的支持。
梁老师介绍了一些网站 力扣 github
学习C语言重要的还是练习,而不是一味地看书,需要实践。

二.数据类型
1.所有的数据类型的定义、初始化;
e. g. 变量a
int a; 整型变量
int* a;整型指针变量
int** a;整形指针的指针变量
int a[10];整形数组
int a[10];整形指针数组
int( a)[10];数组指针变量,指向的是执行数组
int( a)(int);函数指针变量,指向的是形参为int返回值为int
int( a[10])(int);函数指针数组. 形参为int,返回值为int
一个有十个指针的数组,该指针指向一个函数,该函数有一个整型参数,并返回一个整型数
e. g. 2 int((fp1)(int)[10];
fb1:函数指针变量指向一个函数,形参为int,返回值为数组指针,该指针指向一个由十个整形指针的数组。
int((arr[5])())();
arr:函数指针数组 该数组的每个元素都指向函数,函数形参为空,返回值为函数指针,该函数指针指向一个形参为空返回值为int的函数;
1、float((b())[])();
B,函数形参为空返回值,为数组指针指向一个函数指针数组,该数组的数组的每个元素指向一个形参为空返回值为float的函数;
2.void(c)(char,int()());
C函数指针变量,指向一个函数返回值为void*,有两个形参,一个为char,一个函数指针,该指针指向一个形参为空,返回值为int的函数;
3.void *(d)(int &,char*(*(char,char **));
4、float(*(e[10])(int&))[5];
e函数指针数组,数组的每个元素指向一个形参为int,返回值为数组指针函函数,该数组指针指向一个有五个元素的float的数组。

右左法则
先找到变量名 往右看 ;就是一个变量
再往左看 确定变量保存的是什么类型
确定a是一个变量,就要确定该变量保存什么类型的数据,保存什么类型的数据,它就是什么类型的变量;
确定a是一个指针变量,就要确定该指针变量保存什么类型地址,保存什么类型的地址,他就是什么类型的指针变量;
确定a是一个数组 就要确定数组里的元素是什么类型的,元素是什么类型的。它就是什么数组。
确定a是一个函数,就要确定函数的形参和返回值。
1.各种数据类型的字节长度(所占内存空间的大小)及取值范围;
char的取值范围:unsigned 0-255
signed-128-127
原码 反码 补码解决复数的存放问题
计算机里保存的是补码
正数的补码就是他的原码
负数的补码取反加一
000 0000
1111111
10000000=-128
1111111
0000000
000 0001=-1
10000000
11111111
0111 1111=127
基本类型的字节长度:
sizeof(int)=4
sizeof(char)=1
sizeof(short)=2
sizeof(long)=4旧版 long* 8 其他相同
sizeof(float)=4 64位
sizeof(double)=8
各种数据类型的指针的字节长度:
指针变量的字节长度是固定!<因为指针保存的是地址,地址在操作系统中是固定的长度,是由操作系统位数决定的,32位系统指针四个字节64位指针8个字节>
sizeof VS strlen
sizeof 运算符不是函数 作用:计算数据类型或者变量的所占内存空间的大小strlen是字符串库函数;作用:统计当前字符串的字符个数不包含\0Sizeof,在计算字符串的大小是包含\0输入输出printf<输出 格式化控制符>scanfgetcharputchargets++i 被替换成变量ii++ 被替换成数值

感受:对C语言的掌握还不够,一直很焦灼,有点颓,挫败感。因为基础不够牢固,之前的几节课,听得内容都感觉很陌生,今天的课真正开始C语言的回顾学习,才让我感到一些熟悉,同样获得了很多从未了解的知识,不知道结果如何,但确实有所收获。希望可以调整好学习状态,加强实操。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: