黑马程序员---学习笔记7:指针
2015-08-20 12:57
190 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
——-
概念:内存单元的编号也叫做地址,通过这个地址可以找到相应的内存单元,通常把这个地址叫做指针
好处:
1)为函数提供修改调用变量 的灵活手段。
2)让程序有多个返回值
3)可以改善某些程序的效率(传地址就可以了,不用传整个数据块)
4)为动态数据结构(二叉树,链表)提供支持
通过变量名获取变量的值:直接存取
从地址开始,连续获取固定个数的存储单元里面的值:间接存取
指针变量:存放地址的变量
定义一个指针变量:
1)指针类型说明符,说明该指针指向的地址存储什么类型的数组,会使用到几个存储单元,void类型,表示的任意类型,与之前定义函数时表示,无返回值不同,需要注意
2)指针变量名
3)变量值(地址),定义变量的时候一定要给定一个值,如果没有,会造成悬空指针,没有指向,从而不能存储值
注意事项:
1)“*”必须有
2)指针变量不能用来存放数值,只能用来指向给定类型数组的存储地址,否则会给一个警告
3)指针变量,也分局部变量和全局变量
指针变量的使用:定义--->初始化--->使用指针变量,间接操作
指针变量需要用地址初始化:
1)定义同时初始化
(1)完全初始化
int *p=&a;p指向变量a;
(2)部分初始化
int *p=&a,*p2; 减少这种初始化,最好是定义时初始化
2)先定义后初始化
先定义后,指针里面是垃圾值,称为野指针,尽量不要这样
3)如果定义了一个指针,暂时不知道指向哪个值,怎么办?
int *p=NULL; NULL是空(0)
等价于
int *p=0; 这样把一个指针指向空,什么也不指
常见错误:
1)int *p=1000;应该赋值地址,而不是常量。
用*获取指针变量指向的存储空间的内容。
有关的两个运算符:
1)& 取地址运算符
2)* 指针运算符(间接访问运算符)
*的两种用法:
1)定义一个指针
2)存取指针变量指向存储空间的内容
指针变量如果不初始化 的后果:
1)值是一个垃圾值,很可能存放系统程序的地址,造成系统崩溃。
在函数调用时,参数是指针的话,是地址传递,而不是值传递,调用函数操作的也是原数据,而值传递却是修改的新数据,从而无法对原数据进行改变
指针的应用场景:
1)在被调函数中可以修改主调函数中的变量值
2)让函数有多个返回值
这实际上是使用了,第一个特点:改变原参数的值。操作方式:将需要修改 的值的地址通过实参传递到被调函数中,在被调函数中对其中的值进行修改,这样就达到了返回多个值的效果(其实是修改了多个,主函数中的数值)
二级指针:一个指针变量存放是另外一个指针变量的地址
为什么指针要区分类型?
在同一编译环境下,一个指针变量所占用的存储空间是固定的。
指针使用的原理是:当指针获得一个地址后,指针从相应的地址开始读取数据,读取的多少由指针的类型决定,Int类型的指针读取4个字节的内容,double类型的指针读取8字节的内容,char类型的指针读取一个字节的内容,读取了这些二进制的代码之后,它会按照相应类型的组合方式组合成相应的数据。如果不区分指针类型,就无法根据不同的数据类型进行数据的读取,造成程序错误。
——-
概念:内存单元的编号也叫做地址,通过这个地址可以找到相应的内存单元,通常把这个地址叫做指针
好处:
1)为函数提供修改调用变量 的灵活手段。
2)让程序有多个返回值
3)可以改善某些程序的效率(传地址就可以了,不用传整个数据块)
4)为动态数据结构(二叉树,链表)提供支持
通过变量名获取变量的值:直接存取
从地址开始,连续获取固定个数的存储单元里面的值:间接存取
指针变量:存放地址的变量
定义一个指针变量:
1)指针类型说明符,说明该指针指向的地址存储什么类型的数组,会使用到几个存储单元,void类型,表示的任意类型,与之前定义函数时表示,无返回值不同,需要注意
2)指针变量名
3)变量值(地址),定义变量的时候一定要给定一个值,如果没有,会造成悬空指针,没有指向,从而不能存储值
注意事项:
1)“*”必须有
2)指针变量不能用来存放数值,只能用来指向给定类型数组的存储地址,否则会给一个警告
3)指针变量,也分局部变量和全局变量
指针变量的使用:定义--->初始化--->使用指针变量,间接操作
指针变量需要用地址初始化:
1)定义同时初始化
(1)完全初始化
int *p=&a;p指向变量a;
(2)部分初始化
int *p=&a,*p2; 减少这种初始化,最好是定义时初始化
2)先定义后初始化
先定义后,指针里面是垃圾值,称为野指针,尽量不要这样
3)如果定义了一个指针,暂时不知道指向哪个值,怎么办?
int *p=NULL; NULL是空(0)
等价于
int *p=0; 这样把一个指针指向空,什么也不指
常见错误:
1)int *p=1000;应该赋值地址,而不是常量。
用*获取指针变量指向的存储空间的内容。
有关的两个运算符:
1)& 取地址运算符
2)* 指针运算符(间接访问运算符)
*的两种用法:
1)定义一个指针
2)存取指针变量指向存储空间的内容
指针变量如果不初始化 的后果:
1)值是一个垃圾值,很可能存放系统程序的地址,造成系统崩溃。
在函数调用时,参数是指针的话,是地址传递,而不是值传递,调用函数操作的也是原数据,而值传递却是修改的新数据,从而无法对原数据进行改变
指针的应用场景:
1)在被调函数中可以修改主调函数中的变量值
2)让函数有多个返回值
这实际上是使用了,第一个特点:改变原参数的值。操作方式:将需要修改 的值的地址通过实参传递到被调函数中,在被调函数中对其中的值进行修改,这样就达到了返回多个值的效果(其实是修改了多个,主函数中的数值)
二级指针:一个指针变量存放是另外一个指针变量的地址
为什么指针要区分类型?
在同一编译环境下,一个指针变量所占用的存储空间是固定的。
指针使用的原理是:当指针获得一个地址后,指针从相应的地址开始读取数据,读取的多少由指针的类型决定,Int类型的指针读取4个字节的内容,double类型的指针读取8字节的内容,char类型的指针读取一个字节的内容,读取了这些二进制的代码之后,它会按照相应类型的组合方式组合成相应的数据。如果不区分指针类型,就无法根据不同的数据类型进行数据的读取,造成程序错误。
相关文章推荐
- 黑马程序员——正则表达式
- 黑马程序员-JAVA基础测试题(1-5)
- 黑马程序员-----Java基础-----Collection-Set
- 黑马程序员——java基础语法
- 剑指offer-第四章解决面试题思路之总结
- 剑指offer-第四章解决面试题思路(字符串的排序)
- 黑马程序员——Java基础---基础语法(三)
- 微软面试100题2010年版全部答案集锦(含下载地址)
- 黑马程序员——Java基础---基础语法(二)
- 说说我的第一次面试
- 一道有趣的面试题
- 面试笔记之链表篇
- 工作中的程序员如何进阶
- 一位JAVA程序员的七夕情书——致未来的另一半
- 程序员的健康之道
- 几道常考的前端面试题(蘑菇街)系列一
- 老板会喜欢那种程序员
- strut2的核心要重点以及面试常问的问题
- 怎样才能成为被人需要的那个IT男
- 面试中常问的关于链表的题目