目录
一.基本类型
1.1.整型int
1.2.实型(浮点型)
1.3.字符型char
二.构造类型
2.1.数组类型[]
2.1.1.字符数组
2.1.2.一维数组
2.1.3.二维数组
2.1.4.三维数组
2.2.结构体类型struct
2.2.1.定义
2.2.2.结构体变量
2.2.3.结构体数组
2.2.4.指向结构体的指针
2.2.5.指向结构体数组的指针
2.2.6.函数
2.3.共用体类型
2.4.链表
2.4.1动态数据结构
2.4.2.基本操作
三.枚举类型
四.指针类型
4.1.内存空间
4.2.引用
4.3.指针变量
4.4.一维数组与指针
4.4.1使用指针变量引用数组元素
4.4.2数组名作形参实际上就是一个指针变量存放首地址
4.4.3.指向字符的指针变量和字符数组的区别
4.5.多维数组和指针
4.5.1.二维数组与指针
4.5.2指针数组
4.5.3.main函数
4.5.4.函数和指针
4.5.5.stdlib.h
五.空类型
注意:e之前必须要由数字,e之后的指数必须为整数
数组是具有相同类型的一组有序数据的集合,数组在内存中占用一段连续的存储空间
类型名 数组名[常量表达式]
注:
1)常量表达式(确定数组的长度):可以包含整型的常量和符号常量,不能包含变量。
2)C语言不允许对数组的长度动态定义。
3)数组一经定义,C语言编译系统就在内存中分配一段连续的空间,用来存储数组个元素的值;
4)数组名表示一端连续空间的起始地址
数组名[下标],例:a[5],a[i+j]
注:下标:可以是整型,也可以是整型表达式;只能是逐个引用,循环
若没有对数组元素赋值,则其值是随机值;初始化是在给数组分配空间时进行的赋值。
1)完全初始化 int a[10]={1,2,3,4,5,6,7,8,9,10};
2)部分初始化 int a[10]={1,2,3,4,5};
3)省略数组长度初始化 int a[]={1,2,3,4,5,6,7,8,9,10};
注:部分初始化,没有赋值的自动补0或0.0;如果超出长度,编译会出错;省略数组长度的初始化,有多少个元素,就默认是多少长度
结构体类型可以嵌套定义
系统为定义的结构体变量分配内存空间,可以对变量进行赋值,存取,运算
1.定义
1)先定义结构体类型,再定义结构体变量
struct结构体名 结构体变量名表
2)在定义结构体类型的同时定义结构体变量
struct 结构体名{结构体成员表}结构体变量名;
3)在定义结构体类型时省略结构体名,直接定义结构体变量
struct(结构体成员表)结构体变量名表;
注:无结构体名的结构体类型无法重复使用
2.内存空间大小
3.引用
4.初始化
1.定义一个指针变量,可以指向结构体类型struct student
struct student *ps;
//该指针就是结构体变量在内存所占用的存储空间的首地址
2.(* 结构体指针变量名).结构体成员名
注:必须要有圆括号
3.指向成员运算符:->
4.一个结构体指针变量只能用来指向同类型的结构体变量/结构体数组元素,不能使它指向某一成员
++p->score
(++p)->score
(p++)->score
1.单向链表
值有范围限定
enum 枚举名{枚举值列表}
以字节为单位的存储单元,编号——地址;内容——值
1.直接引用
x=6
通过标识符(变量名)存取变量的值;直接修改值,而不关系具体内存单元地址
2.间接引用
//通过p中存储的值找到变量所占用的内存空间,间接的访问/修改变量x的值
*px=6
偏移量:由该数组相对于数组首元素的位置及每个数组元素所占存储空间大小决定
*(a+3)==>a[3]
数组名(数组的首地址)==>指向数组首元素的指针常量
1.可以使用下标方式引用数组元素
//例:p=a或p=&a[0]
//访问数组第i个元素
a[i] //数组下标:
*(a+i)//数组首地址加偏移量:
p[i] //指针下标:
*(p+i) //指针变量加偏移量:
p++;p-- //指针移动
2.指向同一数组的元素的指针
比较运算——元素在数组中的前后顺序
指针的减法运算——数组元素之间的个数
3.数组名与指针变量区别
指针变量在执行期间可以改变,p++合法
数组名是数组的首地址,是指针常量,a++不合法
指针变量是一个变量,用于存放字符串的首地址,可以自增
字符数组名代表首地址,是常量,不能进行自增
字符数组名不能直接进行操作;
字符指针:char * str="scwv"==>char *str;str="scevs"
2.顺序排序
3.通过行指针
类型标识符(* 行指针变量名)[长度]
形参为二维数组名实质上就是定义一个行指针变量
int * p[5]
类型标识符 * 指针数组名[长度]
只能有2个; main(int argc,char * argv[])
argc:命令行中参数的个数(文件名本身也是一个参数);
argc的值在输入命令行时由系统按参数实际的个数自动赋予
argv:指向字符的指针数组,值为命令行中各字符串的首地址(系统将命令行参数看作字符串表列)
函数指针变量:把函数的入口地址赋给一个指针变量,该指针就指向函数
提供了一组用于动态内存分配的函数;
供用户在程序执行时申请内存空间以及释放不再需要的内存空间
1. void * malloc(unsigned size)
如果分配成功,返回被分配内存的 void *类型的指针
若没有可用的内存,返回NULL指针
2. void * calloc(unsigned n,unsigned size)
如果分配成功,返回被分配内存的 void *类型的指针
若没有可用的内存,返回NULL指针
3. void * realloc(void * ptr,unsigned size)
分配成功:将原数据从头到尾拷贝到新分配的内存空间,并释放原来ptr所指向的内存空间,同时返回指向新分配内存的 4.void *类型的指针
分配不成功,就不修改原有数据,并返回NULL
5. void free(ptr)
只有通过动态分配函数分配的空间才能通过free释放
null