黑马程序员技术交流社区

标题: 指针和数组 [打印本页]

作者: 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)等效 ...

图中*(intP-1)的小括号不能丢!若写成*intP-1,则代表*intP的值减1,因为'*'的优先级高于'-'。*(intP-1)等效 ...

Snip20150809_66.png (179.09 KB, 下载次数: 1)

错误写法

错误写法

Snip20150809_69.png (116.61 KB, 下载次数: 1)

Snip20150809_69.png

作者: 温柔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
lzfree 发表于 2015-8-9 23:02
不错的笔记,洪运

哈哈,谢谢夸奖
作者: why19910522    时间: 2015-8-10 12:47
能对大家有帮助我就很高兴了!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2