嵌入式c语言 之数据结构:为什么嵌入式要选择c语言? *c的可移植性好:能在不同平台的结构访问硬件 *c具有简洁紧、使用灵活的语法机制,并能直接访问硬件。 *c具有高效的运行效率

来源:互联网 发布:广州新科佳都科技 知乎 编辑:程序博客网 时间:2024/05/30 05:40

嵌入式c语言;数据结构

为什么嵌入式要选择c语言?

  *c的可移植性好:能在不同平台的结构访问硬件。

 *c具有简洁紧、使用灵活的语法机制,并能直接访问硬件。

 *c具有高效的运行效率

                                           1:直接访问硬件(对硬件初始化)、

内核(kernel)内编程:c语言嵌套汇编        2:汇编是低级语言    

          对硬件做复杂操作用cc为高级语言

面向结构的语言与面向对象的区别?

  面向结构:是为了解决具体事物

  面向对象:解决宏观问题       只关心结果

优点:代码的复用性、维护性、扩展性

             C&RC

C语言标准:   ANSIC / C89

            C99

 

数据类型:

什么叫数据类型:数据集合的划分,不同数据类型对CPU的意义不一样。

 

强制类型转化:

 

Char < int < float < double (隐式类型转化)

 

字节长度:位(bit)、字节、半字、字

1字节 = 8

1半字 = 2个字节= 16

= 4个字节= 32

Char : 1字节

Int4字节

Short:2字节

Long: 4字节

Long long : 4字节

Float: 4字节

Double: 8字节

*对于任何类型的指针,都是4字节(在32为操作系统上)。

 

取值范围:unsigned char : 0~255

 

Char:    char-128~127

 

 

typedef来对数据类型重定义,提高代码的移植性。

如:typedef  unsigned  char  Char

 

当有符号位和无符号位比较时,默认有符号数自动转化成无符号数。

 

Strlen sizeof的区别

 1strlen是函数,而sizeof是运算符。

2strlen遇到’\0’结束(不计算’\0’),而sizeof要计算’\0’。

 

常量与变量:

常量: 常量都是有符号位的、

变量:变量有三个特点

    1:变量的数据类型

    2:变量的作用域。

    3:变量的内存区域。

   一般我们使用的内存都是系统映射的虚拟内存。

虚拟内存地址空间的划分:

 

内核        

 

栈空间       保存:局部变量、函数形参、自动变量。

 

堆空间      mallocralloccalloc(分配空间),用free()释放

 

                bss:保存未初始化的全局变量(系统自动分配为0

数据段           

                rodata:常量

 

                .data(静态数据区):初始化的全局变量、static修饰的变量

代码段

 

    

          特点:

栈空间:先进后出、 管理权限:系统

 

堆空间:先进先出、 管理权限:用户。

 

局部变量与全局变量:

局部变量:也叫内部变量,在函数内定义,且其作用域也仅限于函数内。

全局变量:也叫外部变量;在函数外定义的,其作用域是从其定义处到程序结束。


声明与定义:

 定义:创建一个变量、分配内存空间,且每个变量只能定义一次。

 

声明:告知编译器,这个名字(变量)已经匹配在一块内存,但未分配内存。声明可多次。


左右法则:  先看变量右边,再看左边(右一次,左一次)

                          -----遇结束标志从右/左换到左/


结束标志:分号;。 逗号,。括号()

 

  如:

   1):  int   a ;                   整型变量

   2):  int  *a ;                   整型指针变量

   3):  int  **a;                   整型指针的指针变量

   4):  int  a[10];                  整型数组

   5):  int  *a[10];                 整型指针数组变量

   6);  int  (*a)[10];                 整型数组指针变量

   7):  int  (*a)(int);                 整型函数指针变量

   8);  int  (*a[10])(int);              整型函数指针数组

 

   9):  int *(*(*fp1)(int))[10]

变量fp1:函数指针变量,该函数指针指向一个形参为int,返回值为数组指针,该数组

 指针指向一个整型指针。

 

   10): int *(*(*arr[5]) () ) ();

变量arr:函数指针数组变量,该函数指针数组的元素指向一个形参为空,返回值为

 函数函数指针;该函数指针指向一个形参为空,返回值为整型指针。

 

   11): float ( *( *b() ) [] ) ();

变量b:函数,形参为空,返回值为数组指针,该指针指向一个函数指针数组,该数组

  指向形参为空,返回值为float函数。

 

   12): void *( *c) (char , int (*) () );

 变量c:函数指针变量, 指向函数形参为char,函数指针,返回值void *

 

  13): float ( * ( *e [10 ] ) ( int * ) ) [ 5 ];

   变量e:函数指针数组,该函数形参为int * ,返回值为指针数组,该数组元素都是float.  



 

 

 

0 0