C语言总结的知识点

 

什么是有效数字?
-------------------------
数据类型
运算符:
函数:

程序结构:
存储结构
内存管理

关键字:
-------------------------

C语言:
我认为编程就是对数据操作

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx数据类型xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
基本数据类型:原子数据类型是最小数据单元:
  
空类型:是所有数据类型的基础。   

构造数据类型:在基本数据类型的基础上构造而成的复合数据类型。
############################
基本数据类型:也称为原子数据:最小数据单元
############################
整型变量
种类:    short int  ,int ,long int
长度:    32位机长度:2 4 4
注意;    在嵌入式系统中为了兼顾可移植性和效率:
    将int的控制在unsigned int和 signed int的交集

整型常量:
开头:     以0和0x开头区分八进制和十六进制
结尾:    为了显示的表达整型数据的类型,在结尾添加L和U分别表示长整型和无符号整型
#####################
浮点型变量
种类:    float double long double
长度:     4 8 8
有效数字: 6  16 18

浮点型常量
表现形式:
点分十进制:默认double类型
指数形式: 尾数E指数  3E-3
########################
字符型变量:
种类:    char
大小:  1
内容:    字符对应的ASSIC值

字符常量
形式: 用单引号括起一个字符
特殊:    特殊的字符串常量转移字符:\n \t \\ \'

###########################
指针型
指针常量:
数组名:    int a[];a为地址常量;
字符串常量:    char a[]=“asdf”;a为字符串常量;
C语言中没有专门的字符串常量,利用字符串所在内存的首地址表示该字符串;


指针变量:
定义;    给每个内存单元对应一个编号,利用该编号可以快速方位该内存单元;
大小:    编号就是指针:四字节,内存单元:1字节
关于*int *p;        *是数据类型一部分
int *p,q;    p是指针,q是整型变量
*p:        指针解引用符
关于二维:
二维指针:    int **a;    保存变量类型一维指针的地址
二维数组指针:    int (*a)[];    保存变量类型二维数组名
二维指针数组:    int *a[];    是一个数组,元素类型为指针

野指针:
定义:    指针随机指向一块内存:
原因:    指针变量未初始化
    指针已被释放
    指针被手动free
    指针访问越界
########################
枚举型


####################
空数据类型:
NULL:常量值为0

void *
定义:    数据类型不确定的指针变量
作用:    通过强转可以指向任意数据类型
使用:    (void *)malloc(size):用于数据类型转换;
     fun(void *a):用于参数传递
    
####################
构造数据类型
####################
结构体和数组:
结构体和数组型变量作为形参:
    分别是值传递和地址传递;
####################
数组:
定义:    具有一定关系的若干个变量集合
种类:    数值数组,字符数组,指针数组,结构体数组
格式:    数据类型 数组名 数组长度
        数组名:地址常量
        数组长度:常量
注意:    防止数组访问越界;
初始化:
不初始化:
    局部数组不初始化,元素值不确定。
    static数组不初始化,默认值零
    全局变量不初始化,默认值零
初始化:
    全部初始化:定义时初始化。int a[2]={1,2};
    部分初始化:初始值比数组长度小,自动赋零。int a[2]={1};
    赋值初始化:定义的时候无数组长度,int a[]={1,2};
初始化零:
    直接赋值为零;int a[2]={0};

字符数组和字符串:
char a[]="asdfg";
    数组长度:字符个数加一,默认添加\0
char *a="asdfg";
    字符指针a指向一个字符串常量;

字符串处理函数函数:
    赋值:strcpy(),
    比较:strcmp(),
    求长:strlen().
######################
结构体:        
特点:
    ①用户自行构造
    ②由不同基本数据类型构成
    ③定义时不分配空间,定义变量时才分配;
使用:
    访问结构体变量的成员:
    结构体变量名.成员名
    结构体指针->成员名
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx运算符xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
原则:尽量使用括号,阅读更方便;
优先级:大略分:四大天王() [] -> .
        单目
        双目
例如:*p++和*++p;
    *p++;访问p指向的对象,p后移一位;
    *++p;访问p后移一位所指向的对象;
数据类型转换:对数据类型进行临时转变,并不改变本身类型;
    自动:float-》double   char short-》int
    强制:(类型名)表达式
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx函数xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
编程的思想:高内聚,低耦合;
格式:返回值类型 函数名 参数 函数体
==============
函数声明:
extern修饰:表示该函数定义在其他源文件中
static修饰:表示该函数只能在本文件内使用
==============
函数调用:
①函数语句
②函数表达式
③函数参数
==============
返回值

=============
函数名:
定义:    是函数指针,是一个函数的入口地址
作用:    用于回调函数(信号注册函数,线程创建函数)
回调函数三个特点:事件触发,自动运行,函数指针
==============
参数:
值传递:    形参和实参是两个变量
地址传递:    通过地址可以访问同一块内存
==============
被调函数向主调函数返回值得三种方式:
1.返回值
2.地址传递
3.全局变量
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx程序结构xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
种类:        顺序结构,分支结构,循环结构
分支结构:    if switch
循环结构:    while for

跳转语句:
    break:跳出循环
    continue:跳出本次循环;
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx内存管理xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
内存区间分类:栈区  堆区  全局变量及静态变量区/静态存储区   代码区
malloc free
===============
栈区:        此存储方式的变量的分配和释放都是自动进行的;
堆区:        用于动态分配,在程序运行时分配空间 ,用malloc手动申请,手动free释放
静态存储区:    内存在编译时分配好,程序结束才释放例如:全局变量,静态变量,字符串常量。
代码区:    存放程序代码,只读
===============
malloc和free:两个配对使用;
malloc
格式:    (void *)malloc(size);
返回值:成功返回申请内存的首地址,失败返回NULL;
free
格式:    free(堆区指针)
注意:    不能重复释放

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx存储模型xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
从不同的角度分析:生存周期,作用域,种类;
==========
生存周期:
静态存储:程序运行时就分配存储空间,运行结束才释放内存
动态存储:程序运行时动态分布存储空间,使用完毕立即释放
==========
作用域:
局部变量;
定义;定义在函数模块内部的变量,
作用域;仅在函数模块内部有效
运行周期:局部变量在函数模块进入堆栈式生成,在弹出堆栈时消亡。
全局变量:
定义:定义在所有函数模块之外;
作用域:源文件
使用:可以一次定义,多次声明,声明时加修饰符extern;
==========
五种存储模型:1 auto 2 register 3 静态空链接 4 静态外部链接 5 静态内部链接 
==========
auto(自动)
局部变量默认是auto存储类型

动态存储,作用域函数模块内部,空连接,无默认初始化
===========
register(寄存器)

动态存储,作用域函数模块内部,空连接,无默认初始化
保存在cpu的寄存器中,则变量不能使用取地址符,不能修饰全局变量,长度不大于整型长度。
===========
静态 空连接

static修饰局部变量:静态存储,作用域函数模块内部,空连接,默认初始化零
===========
静态 内部链接

static修饰全局变量:静态存储,作用域函数本文件,内部连接,默认初始化零
===========
静态 外部链接

全局变量:静态存储,作用域源文件 外部链接,默认初始化零

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx关键字xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ypedef define const

typedef:为变量类型取一个易记且意义明确的名字
typedef unsigned long uint32
==========
define:
预处理指令,实际就是符号替换。
==========
const;定义常变量
const int a;定义常量a
const int *a;定义*a为常量
int *const a;定义指针常量a
==========
头文件防止重复包含

 

posted @ 2018-10-31 11:25  蓝勃斐重新开始  阅读(243)  评论(0编辑  收藏  举报