Bootstrap

数据类型及常量变量

数据类型:
char 类型 1字节
有符号(+/-)数 signed char c; == char c;
范围: -128 ~ 127
验证:有符号类型char类型的数据范围是否为上述范围

#include <stdio.h>

int main(void)
{
    char i = 0;
    for(i=0;i<200;i++)
        printf("%d\n",i);
    return 0;
}
无符号数  unsigned char c;
          范围: 0 ~ 255      
验证:无符号类型char类型的数据范围是否为上述范围

short 类型:===>短整形 ===》属于整形范围
===》1、所占的字节空间 ===》申请该变量会从系统中拿到多大空间。
sizeof(short) ===> 2 字节
2、数据类型表示的范围
2.1 有符号: signed short
-32768 ~ 32767 ===》65536个
2.2 无符号: unsigned short
0 ~ 65535 ==>65536个
验证:以上两种short类型的数据范围是否为上述范围

int 类型: =》整形 =》计算机的位数同步>1、所占字节空间
sizeof(int) ====>4 >32bit表示当前自己的位数
2、数据类型表示范围
2.1 有符号: signed int === int
-2^31 ~ 2^31 -1;
-2147483648 ~ 2147483647
2.2 无符号: unsigned int
0 ~ 2^32-1(4294967295)
=>4G
验证:有符号类型int类型的数据范围是否为上述范围

long 类型:===》长整形 ==》属于整形
在32位机器中他的字节占用空间 == int
在64位机器中他的字节占用空间 8 字节
有符号类型:signed long c ⇒ long c ;
范围 :-263 ~263-1
无符号类型:unsigned long c
范围 : 0~264-1

long long 类型 ==》长长整形 ===》属于整形
所占字节空间 == 8 字节
表示范围 无符号:0 ~ 2^64-1
有符号:-2^63 ~ 2^63-1

实数 === 浮点数 ===》带小数点的数字
1、float 类型: ===》单精度浮点数 》字节占用 4字节
默认的精度6位。默认打印输出的数据一般只取前5位。
2、double 类型 :
=》双精度浮点数 ===》字节占用 8 字节
默认的精度12位 ,默认lf 输出只显示前6位。
面试题:
试编写代码用浮点数完成与0 的比较。

浮点数的存储
符号位 指数位 尾数位

常量与变量
常量的分类:
整数常量:
十进制常量: 1 2 3 100 55 ==》0-9 组成
八进制常量: 01 043 077 ==》0-7 组成
十六进制常量: 0x11 0x8f 0xe4 ==》0-F组成
浮点数常量
十进制常量: 1.234 3.1415
指数常量:
格式:[+/-]M.Ne[+/-]T
M 是整数位
N 是小数位
e 是10
T是10 的指数
eg: 1.36e+10 ===>1.36 * 10^10
-1.23e-8 ===>-1.23 * 10^(-8)
注意:e之前必须由数字,e之后必须为整数
字符常量 ===>ascii中所有的单个字符并以’ '表示范围。
eg:‘a’ ‘?’ ‘+’ ‘W’
‘ab’ ==> 错误
注意:所有的字符常量都等于其ascii对应的数字值
字符串常量 ==>将多个或者一个字符用" "表示。
eg: “abc” “1” “1334” “” " "
注意: “1” != ‘1’ != 1
‘0’ “0” 0 ‘\0’ NULL NUL
标识符常量 ===>宏定义
#define MAX 100
#define PI 3.14159267
注意: 标识符常量结尾不能有 “;”
符号常量是用宏定义来定义的,不能被赋值,也不能被改动。可以修改宏定义
部分,实现一改全改。通常符号常量名的命名规则是全部大写,而且要见名知义。

变量 =》可以变化的量=》区别常量
C 语言约定变量定义有格式:
格式:<存储类型> 数据类型 变量名称;
eg: int a;
1、<存储类型> 可以省略,一般有如下四种形式。
auto 自动变量,可以省略,存储在栈区
static 静态变量,不能省略,存储于静态区
extern 外部变量,不能省略,
register 寄存器变量,一般不用

int a ; 默认等于 auto int a; auto signed int a;
auto变量在作用域结束即内存失效。
static int b ;===>地址距离入口函数不远
readelf -h ./a.out
static 变量的生命周期会伴随整个进程执行过程。
static :1)声明变量时,变量值会在函数调用之间保留
2)当使用关键字static 声明函数时,那么这个函数对其他文件不可用
3)一般而言,全局变量对于其他源文件可用,但是static声明时,对其他源文件不可用
register int c: 寄存器变量是变量值存储与CPU寄存器中的变量,访问速度快于其他变量。
extern 表示变量不在当前文件中,但是属于当前工程。
栈区:主要是函数内部的一些局部变量,当函数结束后,变量的空间会被
释放掉。-

堆区: 动态存储,由程序员手动申请,手动释放,申请函数malloc(
realloc,calloc),释放函数free.
静态区:主要放全局变量,static修饰的变量。
2、数据类型 ==>基本数据类型 构造数据类型*
int a;
char c;
struct xxx b;
注意:定义数据类型一般要考虑数据的表示范围。
**3、变量名称:=》自定义的名称 ===》C 语言命名规范。
*
3.1 不能与关键字冲突 ==》int int ;
3.2 不能以数字开头 ==》int 8a;
3.3 所有的命名只能是数字+字母组合允许下划线。
》int a/b 错误
》int a8=b 错误
》int a_b 正确 _ab
业内习惯:
1、命名长度不要超过10字母
2、命名方式: 驼峰命名 下划线命名
驼峰命名: RouteInterface
下划线命名:route_interface >rt_intf>_inte
3、命名细节: 根据不同公司的编码规范执行。
产品缩写_模块名称_变量名称
fw_rt_intf; fw_rt_getmax();
c语言约定变量必须先定义后使用。
变量的使用:
1、变量的初始化 ===》变量定义的同时赋值
auto 定义的变量不初始化会有垃圾数据。
初始化方式: 变量类型 变量名称 = 初始化值‘;
eg:int a = 0;
static 定义的变量可以不初始化,默认是0;
全局变量定义的可以不初始化,默认是 0;
char 类型初始化的时候可以是字符常量也可以是整形常量。
eg: char c = ‘a’;
char c2= 95;
2、变量的赋值 ==>变量已经定义好,直接使用该变量。
int a ; /// 变量定义
a = 100; ///变量赋值
注意:赋值符号 “=” 要求左边必须是变量,右边必须是表达式语句。
a = 200 ;
a = b + c ;
a = test() ;
注意:在变量赋值过程中可能出现的类型转换
3、数据类型转换
3.1 显式转换 =》格式 目标变量=(目标类型)表达式;
eg: float a = (float)b;
3.2 隐式转换 》 赋值过程
1、默认转换向=号的左边对齐
2、表达式中有多个类型则向大字节对齐
char
>short
>int
>long
>float
>double
一. 局部变量
函数体内声明的变量称为相对于函数的局部变量。
局部变量具有如下性质:
1. 自动存储期限
调用函数时,自动分配局部变量对应的存储单元,函数返回时收回分配。函数返回时,局部变量并不保留值。
2. 程序块作用域
局部变量拥有程序块作用域,从变量的声明处开始一直到函数体的末尾。
二. 静态局部变量
在局部变量的声明中放置修时关键字static可以使变量从自动存储期限
变为静态存储期限。具有静态存储期限的变量拥有永久的存储单元。在
整个程序执行期间会保留变量的值。
三. 静态局部变量和局部变量的区别
相同点在于作用域范围,不同点在于生命周期

;