0119嵌入式学习

基本数据类型

数据类型要考虑其类型,符号表示 长度 表示方法

实数不能自加自减

%只能对整型进行余操作

-2%-3=-2; 余数的符号与被除数的正负相同

根据运行环境不同 可能取负值也可能为无符号数

在嵌入式开发中,对于有符号与无符号,一定要留心系统默认的是无符号还是有符号

为了解决此问题,通常使用typedef来重新指定声明无符号还是有符号;

typedef int sig_int; //表示有符号int型

typedef unsigned int  un_int;//表示无符号int型

一个字节占8位

字符型

char类型 占1字节 取值范围为-128到127或者0到255

字符型常量:用英文单引号括起来,只保存一个字符'a'、'b' 、'*' ,还有转义字符 '\n' 、'\t'。

字符串常量:用英文的双引号引起来 可以保存多个字符:"abc"。

整型

int类型  2字节或4字节 取值为-32,768 到 32,767 或 -2,147,483,648 到 2,147,483,647

short类型 2字节  取值为-32,768 到 32,767

long类型   4字节   取值范围为-2,147,483,648 到 2,147,483,647

浮点型

float类型  占4字节  取值范围为1.2E-38 到 3.4E+38

double类型 占8字节  取值范围为2.3E-308 到 1.7E+308

void类型

函数返回为空

C中不返回值的函数的返回类型为空 如void main()

函数参数为空

C中不带参数的函数可以表示为void 如 void main(void)

指针指向void

类型为void*的指针代表对象对的地址。void *p;//万用指针  万用等于无用

数据类型转换

浮点型数赋给整型,该浮点数小数被舍去

整数赋给浮点型,数值不变,但是会被存储到相应的浮点型变量中

变量

在程序运行中,可能会产生一些临时数据,应用程序会将这些数据保存在一些内存单元中,每个单元都用一个标识符来表示,这些内存单元就是变量,定义的标识符就是变量名 ,内存单元中存储的数据就是变量的值。在程序中可以将指定的数据存放在变量中,方便随时取出使用。

变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C 是大小写敏感的。

extern int d = 3, f = 5;    // d 和 f 的声明与初始化
int d = 3, f = 5;           // 定义并初始化 d 和 f
byte z = 22;                // 定义并初始化 z
char x = 'x';               // 变量 x 的值为 'x'
extern int a;     // 声明一个全局变量 a

int a;            // 定义一个全局变量 a

extern int a =0;  // 定义一个全局变量 a 并给初值。一旦给予赋值,一定是定义,定义才会分配存储空间

int a =0;         //定义一个全局变量 a,并给初值

另外 若对变量没有初始化直接输出 Windows下会输出乱码 Linux下会输出0

常量

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。

常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。

常量就像是常规的变量,只不过常量的值在定义后不能进行修改。

const 定义的是变量不是常量 只是这个变量的值是不允许改变的常变量

define定义的是不带类型的常数,只进行简单的字符替换,在预编译的时候起作用,不存在类型检查

(1) 编译器处理方式不同

  • #define 宏是在预处理阶段展开。
  •  const 常量是编译运行阶段使用。

(2) 类型和安全检查不同

  •  #define 宏没有类型,不做任何类型检查,仅仅是展开。
  •  const 常量有具体的类型,在编译阶段会执行类型检查。

(3) 存储方式不同

  • #define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。(宏定义不分配内存,变量定义分配内存。)
  • const常量会在内存中分配(可以是堆中也可以是栈中)。

(4) const 可以节省空间,避免不必要的内存分配。

/0就是0

数据类型决定:

数据占内存字节数

数据取值范围

其上可进行的操作

C语言不对数组下标做合法性检查

对数组的操作就是对数组元素的操作

[]下标运算符

变量 (可以改变的量)

变量是内存空间的映射

变量名 以及 文件名 不要以数字命名 取名有一定含义

全局数据区

程序没有结束 数据就不会释放

Return 两种返回 一种返回值 一种返回流程

Printf()函数格式化输出

数据类型说明符

功能:向终端输出若干个任意指定类型的数据

格式:printf(“格式控制”参数列表);

scanf()函数  格式化输入

scanf(“格式控制”,地址列表 );

避免产生输入垃圾

getchar getch getche的差别

输入不回显

Scanf只能指定宽度

------------------------------------------------------------------------------------------------------------------------

存储类

auto 是局部变量的默认存储类, 限定变量只能在函数内部使用;

register 代表了寄存器变量,不在内存中使用;

static是全局变量的默认存储类,表示变量在程序生命周期内可见;

extern 表示全局变量,即对程序内所有文件可见,

auto存储类//可以省略

auto存储类是所有局部变量磨人的存储类

auto只能用在函数内,即auto只能修饰局部变量

register存储类

register 存储类用于定义存储在CPU寄存器中而不是 RAM 中的局部变量。

寄存器只用于需要快速访问的变量,多用于单片机等嵌入式设备。

static存储类

static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。

static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。

全局声明的一个 static 变量或方法可以被任何函数或方法调用,只要这些方法出现在跟 static 变量或方法同一个文件中。

extern 存储类

extern 存储类用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。当您使用 extern 时,对于无法初始化的变量,会把变量名指向一个之前定义过的存储位置。

当您有多个文件且定义了一个可以在其他文件中使用的全局变量或函数时,可以在其他文件中使用 extern 来得到已定义的变量或函数的引用。可以这么理解,extern 是用来在另一个文件中声明一个全局变量或函数。

extern 修饰符通常用于当有两个或多个文件共享相同的全局变量或函数的时候

------------------------------------------------------------------------------------------------------------------------------

运算符

运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 位运算符
  • 赋值运算符
  • 杂项运算符

运算符的运算优先级共分为15 级,1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。

类别 运算符 结合性 
后缀 () [] -> . ++ - -  从左到右 
一元 + - ! ~ ++ - - (type)* & sizeof 从右到左 
乘除 * / % 从左到右 
加减 + - 从左到右 
移位 << >> 从左到右 
关系 < <= > >= 从左到右 
相等 == != 从左到右 
位与 AND 从左到右 
位异或 XOR 从左到右 
位或 OR 从左到右 
逻辑与 AND && 从左到右 
逻辑或 OR || 从左到右 
条件 ?: 从右到左 
赋值 = += -= *= /= %=>>= <<= &= ^= |= 从右到左 
逗号 从左到右 

getchar getche getch 的区别

用getch()getche()必须引入头文件conio.h, 

getch()实际是一个输入命令,作用是从键盘接收一个字符,而且并不把这个字符显示出来,就是说,你按了一个键后它并不在屏幕上显示你按的什么,而继续运行后面的代码,程序中遇到getch();这行语句,它就会把程序暂停下来,等你按任意键,它接收了这个字符键后再继续执行后面的代码。

getche()和getch()很相似,不同之处就在于getch()无返回显示,getche()有返回显示。从键盘上带回显的读入一个字符送给字符变量。

getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了。而getch()和getche()是conio.h中的库函数,它的作用是从键盘接收字符。getchar带有显示。

 getchar()函数等待输入直到按回车才结束(前提是缓冲区没有数据),回车前的所有输入字符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。

getchar()函数就是等待输入(或缓冲区中的数据)直到按回车才结束

C标准规定 fflush()函数是用来刷新输出(stdout)缓存的。对于输入(stdin),它是没有定义的。但是有些编译器也定义了 fflush( stdin )的实现,比如微软的VC。其它编译器是否也定义了 fflush( stdin )的实现应当查找它的手册。GCC编译器没有定义它的实现,所以不能使用 fflush( stdin )来刷新输入缓存。

       对于没有定义 fflush( stdin )的编译器,可以使用 fgets()函数来代替它(比用 getchar()、scanf()等函数通用性好)。可以这样忽略输入流中留下的回车等其它输入,从而使下一次的输入总保持一个“干净”的状

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值