黑马程序员技术交流社区
标题: 指针和数组 [打印本页]
作者: why19910522 时间: 2015-8-9 21:32
标题: 指针和数组
本帖最后由 why19910522 于 2015-8-9 21:35 编辑
指针
1.定义:一是指一种存储地址的数据类型,二是一种保存地址的变量
2.作用:用于存储某一个地址,从而可以通过地址直接对地址所对应的内存空间里的数据进行操作
3.怎么用:
定义:类型 *指针名;如 int *p;表示定义一个可以存储int类型地址的指针变量,叫p
赋值:指针变量名 = 变量地址。如int a = 12;int *p = &a;
4.何时用:当需要存储指针,以便于操作该地址及该地址对应的数据
5.特点:
指针本身也有地址,指针定义后,其自身地址不变,但是里面的存储的地址可以改变
##&p表示指针自身的地址,而p表示指针存储的地址,*p表示指针所存地址的内存空间。*p等效于指针p所存地址对应的空间的变量名,也就是说*p可以当变量使用。变量能做什么事情,那么*p也就能做什么事情。
指针不初始化赋值,不要使用,未赋值前地址时随机的,未赋值不可以用*p
"*"修饰什么就表示时什么类型的指针。判断原则:先确定变量的类型(根据符号优先级)
指针是什么类型,就应该存什么类型的地址,否则*p去对应内存空间的值会出错。
指针与数组
1.指针的数组
首先这是一个数组,然后这个数组是用来存储指针的,那么就叫做指针数组。这个数组里面的元素是指针。这个数组里的元素存放的是指针存储的地址,而不是指针本身的地址。
2.数组的指针
这是一个指针,它的类型是数组类型,用来存储一个数 组的地址。
写法:如int (*p)[3];其中小括号必须有,否则就是指针的数组而不是数组的指针了
取值:(*p)[1] = 23;(注意:小括号不能丢!!!当写成*p[1]时,代表的是指针数组的第二个元素)
3.指针的数组和数组的指针,其写法的区别以及原因
写法:
指针的数组:int *p[3];
数组的指针:int (*p)[3];
原因:因为在计算机中,'[ ]'的优先级高于'*',所以没有小括号时p会先与'[ ]'结合,成为一个数组,然后'*'和int结合成为'int *','int *'用来修饰数组,则此种情况下称为指针的数组。
当存在小括号时,因为'()'和'[ ]'属于同一优先级且是左结合,那么此时p和'*'先结合,成为一个指针,然后'[ ]'和'int '结合成'int [ ]','int [ ]'用来修饰'*p',则此种情况下称为数组的指针。
4.数组元素的指针
这是一个指针,它存储的是一个数组元素的地址。
5.特点
数组名表示数组第一个元素的地址,&数组名表示整个数组的地址。二者值相同但意义不同。
指针可以运算,但只有加减运算。运算的实质时地址的运算,既地址的移动。指针的运算改变的是指针存储的那个地址,而不是指针本身的地址。
指针的运算:当是加法时,地址向高位移动;减法时,地址向低位移动。不同指针类型移动一位(+1或-1)的字节数的不同。实际移动的字节数看指针类型,类型占多少个字节一位就移动多少个字节。
指针的运算移动时,只要是在内存范围内的就不受限制,且不会报错。指针的运算只管地址的移动,并不会管移动后是否会越界。
下图中*(intP-1)的小括号不能丢!若写成*intP-1,则代表*intP的值减1,因为'*'的优先级高于'-'。*(intP-1)等效于intArr[1-1],而*intP-1等效于intArr[1]-1。
下方第二个图为错误的写法
-
Snip20150809_64.png
(230.3 KB, 下载次数: 1)
图中*(intP-1)的小括号不能丢!若写成*intP-1,则代表*intP的值减1,因为'*'的优先级高于'-'。*(intP-1)等效 ...
-
Snip20150809_66.png
(179.09 KB, 下载次数: 1)
错误写法
-
Snip20150809_69.png
(116.61 KB, 下载次数: 1)
作者: 温柔JC 时间: 2015-8-9 21:36
不错的笔记
作者: lzfree 时间: 2015-8-9 23:02
不错的笔记,洪运
作者: furuikai 时间: 2015-8-9 23:08
好的 非常好!
作者: Upliver 时间: 2015-8-9 23:14
挺好的笔记 指针数组 数组指针
作者: 丶空你曾 时间: 2015-8-10 00:57
不错,看着思路很清晰...
作者: why19910522 时间: 2015-8-10 12:46
哈哈,谢谢夸奖
作者: why19910522 时间: 2015-8-10 12:47
能对大家有帮助我就很高兴了!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |