1指针
 1.1语法:
 【基类型*指针变量名】
 【int *p=&a】
 1
 2
 1.2语义:
 【基类型】:指针变量指向的目标的数据类型
 【*】:表示此时定义的变量是一个指针类型的变量
 【&a】:一块存放着int类型数据的空间的地址
 【*p】:
 通过指针间接访问变量的过程:
 (1)首先拿出p指针变量中的 值 (地址)到内存中定位(找内存单元的编号)
 (2)从定位处开始,偏移出sizeof(基类型)大小的一块空间(确定所需内存空间大小)
 (3)把这块空间当做一个基类型的变量来看 (检索存储值)
 1
 2
 3
 4
 5
 6
 7
 8
 1.3指针变量的应用:
 1.3.1在函数间传递信息(被调函数修改主调函数的数据)
 1.两步:
 (1)将主调中想被修改的变量的地址传给被调(【&】传址)
 (2)必须要做【*】运算(间接访问),实现修改(【*】改值)
 2.练习:
 1:求两个数的和
 2:求两个数中的大值,小值
 1
  
 3:使用指针将数组逆序
 1
1.3.2用于处理数组的函数中
 1.通过指针传递地址,函数可以直接操作源数据。(效率高)
 2.要注意使用【const】关键字保护数组中的数据。
 3.使用递增递减指针操作数组需要注意数据越界问题,                                                                    c只保证指向数组及数组后面第一个位置的指针有效。
 1.4指针相关操作
 1.4.1取地址
 【&】:
 1
 1.4.2间接访问数据(解引用)
 【*】:*运算符给出指针 指向地址上储存的值
 注意:
 (1)未初始化的指针解引用的结果是未定义的(随机值)。
 1
 2
 3
 1.4.3指针与整数相加
 【p+1】:地址偏移
 【p-1】:如果相减的结果超出了初始指针所指向数组的范围,计算结果是未定义的。
 1
 2
 1.4.4递增指针
 【p++】:
 【p--】:
 1
 2
 1.4.5指针的关系运算
 【>】:
 【>=】:
 【<】:
 【<=】:
 【==】:
 【!=】:
 1
 1.4.6指针减指针
 前提:两个指针是同一类型的指针
 【p-q】:表示指针之间差了几个基类型。
 【p+q】:指针不能做加法运算。
 1.5指针中的优先级问题
 1.【*】的优先级高于【+】。
 2.【*】和【++】的优先级相同,结合性是从右至左。
 3.【*】的优先级低于【[  ]】。
 1
 2
 3
 1.6指针的应用
 1.6.1系统数据存储方式(大小端)
 补充:
 (1)野指针:指针指向不明确,随机;故通常将指针初始化为NULL;【NULL】:表示0号地址
 (2)未初始化的指针,不要进行解引用。(值存储的位置不明确)
 (3)数组的越界指针只有一个可以进行解引用:C只能保证指向数组任意元素的指针和指向数组后面第1个位置的指针有效。
 (4)指针变量的格式转换说明:
 【%p】:
 【%u】:
 【%lu】:
 1
 2指针与数组
 2.1数组指针
 2.1.1一维数组
 【int (*p)[2];】:p指向一个内含2个【int】类型值的数组的指针。
 详解:p是一个指针,指向一个数组,该数组有两个元素。
 1
 2
 2.1.2二维数组
 【ar[3][2]】:ar是指向数组的指针,该数组内含2个int类型的元素
 1
 2.2指针数组
 2.1.1一维数组
 【int *p[2];】:p是一个内含2个指针的数组,每个指针都指向【int】类型的元素。
 2.1.2二维数组
 3指针与指针
 3.1
 3.2二级指针
 3.2.1语法
 【基类型 **p;】     
 基类型:指针类型
 p:二级指针变量名
 3.2.2语义
 指向指针的指针,用于指向一个指针的地址
 理解:
 1.指针变量
 2.指针变量的地址
【*p】:一级指针本身
 【**p】:二级指针所指向的变量值
 【**p=a    *p=&a    p=&*p】 
 【**p】: 二级指针变量(p)中存放的是一级指针变量(*p)的地址(&*p),
一级指针变量(*p)中存放的是基类型变量(a)的地址(&a),基类型变量的值(**p)。
 【ar[i][j]】:二级指针变量(ar)中存放的是一级指针变量(ar[i])的地址(&ar[i]),一级指针变量(ar[i])中存放的是基类型变量(a,b,c,d...)的地址(&a,&b,&c,&d...),基类型变量的值(ar[i][j]),即(a,b,c,d...)。
 3.2.3二级指针的应用
 (1)二级指针主要用于多级数据之间的传递。
 (2)传递一级指针的地址进函数,从而在函数内改变函数外一级指针的值,而一级指针的值可能为某个变量的地址。
 1
 2
 4指针与函数
 5.指针与【const】
 5.1一级解引用
 在一级解引用的前提下:
 (1)【const】限定的指针可以指向普通指针和【const】限定的指针
 (2)普通指针(非【const】限定的指针)只能指向普通指针
 参照:【c primer plus 第6版-10.6.2-P557】
 (3)【const* p】:不能改变指向的值。
 (4)【*const p】:不能改变指向的地址。(理解:【*p】是取值,【p】是取地址)
 1
 6指针的兼容性
 (1)不同的指针类型不具有兼容性(如int类型的指针不能兼容double类型的指针;指向指针的指针与指向数组的指针)
 (2)