3.const关键字可以用来声明不可赋值的变量
const变量只能在初始化的时候使用赋值操作符
4.volatile关键字用来声明多变的变量
指针变量是一种变量,它专门用来记录地址数据
地址数据的使用方法和普通数据的使用方法完全不同
只要把一个存储区的地址记录在一个指针变量中就
可以通过这个指针变量找到这个存储区
我们可以把通过指针变量找到的存储区叫做指针变量
的捆绑存储区
把捆绑存储区的地址记录在指针变量中就可以实现它们
之间的捆绑,只有捆绑过的指针变量才能用来
找到捆绑存储区。
可以把指针变量存储区和捆绑存储区之间的关系看成
类似于种子文件和普通文件之间的关系
指针存储区永远只能记录一个捆绑存储区的地址
指针存储区在不同的时候可以和不同的存储区捆绑
指针也有类型,不同类型的指针适合和不同类型的
存储区捆绑
指针变量可以用来在程序中代表四个不同的内容
1.指针变量前不加*可以表示指针本身的存储区或这个
存储区里面的地址数据
2.在指针变量前加*可以表示捆绑存储区或捆绑存储区
里的普通数据
NULL表示一个固定地址,叫做空地址,它的数值就是
数字0
没有捆绑过的指针再分成两类,一类记录的是空地址,
它们叫做空指针,另外一类记录随即数据叫做
野指针
为了保证区分指针是否捆绑过必须在程序中禁止出现
野指针
没有初始化的指针是野指针,所有指针必须初始化
如果指针所捆绑的存储区生命周期到了则指针也会
成为野指针
*****指针初始化的时候*没有参与赋值过程,被修改
的是指针本身的存储区
可以在一条语句中声明多个同类型的指针变量,但是
必须在每个指针变量名称前加*
不同类型的指针大小一样,在我们的计算机上都是4个字节
不同类型的指针之间可以互相赋值,赋值结果的地址数据
不会受影响
捆绑存储区的类型通常无法知道,只能根据指针的类型
来判断。
不同类型指针之间可以进行强制类型转换,而且转换
完成后地址数据不受影响
无类型指针用void*表示
这种指针可以和任何类型的存储区捆绑
无类型指针不能直接用来表示捆绑存储区
必须首先把无类型指针强制类型转换成有类型指针,然后
才能表示捆绑存储区
如果地址数据来源很多并且类型不同就应该使用无类型
指针记录它
使用无类型指针的时候必须能通过其他渠道获得捆绑
存储区的类型
地址数据可以参与如下计算过程
地址 + 整数 地址 - 整数 地址 - 地址
地址加减整数n实际上加减的是n个捆绑存储区的总
字节个数
地址减地址的结果是一个整数,它代表两个地址之间
包含捆绑存储区的个数
记录数组中第一个存储区地址的指针可以表示数组中
任何一个存储区
一旦指针和数组捆绑好以后在很多时候它可以代表这个
数组
指针和数组名称的区别
1.指针可以被赋值,数组名称不可以被赋值
2.对数组名称进行sizeof计算得到数组中字节个数,
对指针做sizeof计算得到指针本身存储区的
字节个数
3.一维数组名称取地址后的结果和一维数组名称本身
所代表的地址数据一样,它们只是类型不同
对指针本身取地址的结果和指针内部记录的地址
数据完全无关
可以把指针变量作为循环变量依次处理数组中每个
存储区
声明指针变量时const关键字的使用方法
1.把const关键字写在数据类型前,例如
const int *p_num = NULL;
这种使用方法表示捆绑存储区不可以被赋值
指针本身的存储区可以被赋值
2.把const关键字写在指针变量名称前,例如
int * const p_num = #
这种指针本身的存储区不可以被赋值
可以通过指针对捆绑存储区进行赋值
预习:
1.指针作为函数的形式参数和返回值
2.字符串
作业:
1.编写程序把一个数组中所有存储区的内容
前后颠倒
(要求使用指针实现)
const变量只能在初始化的时候使用赋值操作符
4.volatile关键字用来声明多变的变量
指针变量是一种变量,它专门用来记录地址数据
地址数据的使用方法和普通数据的使用方法完全不同
只要把一个存储区的地址记录在一个指针变量中就
可以通过这个指针变量找到这个存储区
我们可以把通过指针变量找到的存储区叫做指针变量
的捆绑存储区
把捆绑存储区的地址记录在指针变量中就可以实现它们
之间的捆绑,只有捆绑过的指针变量才能用来
找到捆绑存储区。
可以把指针变量存储区和捆绑存储区之间的关系看成
类似于种子文件和普通文件之间的关系
指针存储区永远只能记录一个捆绑存储区的地址
指针存储区在不同的时候可以和不同的存储区捆绑
指针也有类型,不同类型的指针适合和不同类型的
存储区捆绑
指针变量可以用来在程序中代表四个不同的内容
1.指针变量前不加*可以表示指针本身的存储区或这个
存储区里面的地址数据
2.在指针变量前加*可以表示捆绑存储区或捆绑存储区
里的普通数据
NULL表示一个固定地址,叫做空地址,它的数值就是
数字0
没有捆绑过的指针再分成两类,一类记录的是空地址,
它们叫做空指针,另外一类记录随即数据叫做
野指针
为了保证区分指针是否捆绑过必须在程序中禁止出现
野指针
没有初始化的指针是野指针,所有指针必须初始化
如果指针所捆绑的存储区生命周期到了则指针也会
成为野指针
*****指针初始化的时候*没有参与赋值过程,被修改
的是指针本身的存储区
可以在一条语句中声明多个同类型的指针变量,但是
必须在每个指针变量名称前加*
不同类型的指针大小一样,在我们的计算机上都是4个字节
不同类型的指针之间可以互相赋值,赋值结果的地址数据
不会受影响
捆绑存储区的类型通常无法知道,只能根据指针的类型
来判断。
不同类型指针之间可以进行强制类型转换,而且转换
完成后地址数据不受影响
无类型指针用void*表示
这种指针可以和任何类型的存储区捆绑
无类型指针不能直接用来表示捆绑存储区
必须首先把无类型指针强制类型转换成有类型指针,然后
才能表示捆绑存储区
如果地址数据来源很多并且类型不同就应该使用无类型
指针记录它
使用无类型指针的时候必须能通过其他渠道获得捆绑
存储区的类型
地址数据可以参与如下计算过程
地址 + 整数 地址 - 整数 地址 - 地址
地址加减整数n实际上加减的是n个捆绑存储区的总
字节个数
地址减地址的结果是一个整数,它代表两个地址之间
包含捆绑存储区的个数
记录数组中第一个存储区地址的指针可以表示数组中
任何一个存储区
一旦指针和数组捆绑好以后在很多时候它可以代表这个
数组
指针和数组名称的区别
1.指针可以被赋值,数组名称不可以被赋值
2.对数组名称进行sizeof计算得到数组中字节个数,
对指针做sizeof计算得到指针本身存储区的
字节个数
3.一维数组名称取地址后的结果和一维数组名称本身
所代表的地址数据一样,它们只是类型不同
对指针本身取地址的结果和指针内部记录的地址
数据完全无关
可以把指针变量作为循环变量依次处理数组中每个
存储区
声明指针变量时const关键字的使用方法
1.把const关键字写在数据类型前,例如
const int *p_num = NULL;
这种使用方法表示捆绑存储区不可以被赋值
指针本身的存储区可以被赋值
2.把const关键字写在指针变量名称前,例如
int * const p_num = #
这种指针本身的存储区不可以被赋值
可以通过指针对捆绑存储区进行赋值
预习:
1.指针作为函数的形式参数和返回值
2.字符串
作业:
1.编写程序把一个数组中所有存储区的内容
前后颠倒
(要求使用指针实现)