A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马中的小绵羊 中级黑马   /  2015-8-11 22:45  /  881 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

指针总结

指针的本质就是一个能存地址的数据类型,其包含这个地址,同时含有一个步长信息
步长:就是加一或减一时移动的字节数.

用法:
    定义
        指针类型 *指针名;
    赋值
        指针名=地址;
    操作
        1.对指针的操作--根据类型确定字节数
            1.向高位移动(+) :如:p+1(p不变),++p(p变化);
            2.向低位移动(-) :如:p-1;--p;
        2.对指针所指空间的操作
            1.取值 如:*p
            2.赋值 如:*p=值

应用场景:
1.指针与基本数据类型(int char double float)
    应用举例:
        定义:int *p;
        赋值:int a=1; p=&a;
        操作:
            1.对指针的操作
                *对数据本身无意义.(越界了)
            2.对指针所指空间的操作
                1.取值
                    int b=*p;
                2.赋值
                    *p=3;



2.指针与构造数据类型中的用法(数组, 结构体)
数组
    应用举例:
    int arr[3]={1,2,3};
    方法一:用首元素的指针(*推荐)指针运算方便.
        定义赋值:
            int *p=arr;或者:int *p=&arr[0];
        操作:
            1.对指针操作:
                1.向高位移动(+): p+1(p不变),++p(p变化);
                2.向低位移动(-): p-1,--p;
            2.对指针所指空间的操作
                1.取值:
                    取当前位的值: *p或p[0];
                    取下一位的值: *(p+1);或p[1](等效于:arr[当前角标+1]);
                    取上一位的值: *(p-1);或p[-1](等效于:arr[当前角标+1]);
                2.赋值:
                    给当前位赋值:*p=2,; 或p[0]=2;
                    给下一位赋值:*(p+1)=3;或p[1]=3;
                    给上一位赋值:*(p-1)=5;或p[-1]=5;

    方法二:用整个数组的指针
        定义赋值:
            int (*p)[3]=&arr;
        操作:
            1.对指针的操作--*对数组本身无意义
                1.向高位移动(+): p+1,p++;
                2.向低位移动(-): p-1,p--;
            2.对指针所指空间的操作
                1.取值: (*p)[角标],等效于arr[角标];
                        或:*((*p)+1);等效于*(arr+1); (不推荐)
                2.赋值: (*p)[角标]=2;


3.指针与指针类型

        定义赋值:
            int a=0; int *p1=&a;int **p=&P1;
        操作:
            1.对指针的操作--*对指针本身无意义
                1.向高位移动(+): p+1,p++;
                2.向低位移动(-): p-1,p--;
            2.对指针所指空间的操作
                1.取值: 一级取值:*p;(取的是p1的值),二级取值:**p;(取的是a的值)
                2.赋值: *p=&p1;**p=5;

4.指针与字符串
        定义赋值:
            字符串:char *p="heima";//注意与字符数组定义的区别:指针定义时是常量
            字符串数组:char *ps[3]={"heima","itcast","itheima"};//注意是数组
        操作:
            1.对指针的操作
                1.向高位移动(+): p+1,p++;
                2.向低位移动(-): p-1,p--;
            2.对指针所指空间的操作--跟数组使用基本类似
                1.取值:
                    取当前位的值: *p或p[0];
                    取下一位的值: *(p+1);或p[1](等效于:arr[当前角标+1]);
                    取上一位的值: *(p-1);或p[-1](等效于:arr[当前角标+1]);
                2.赋值: !!!注意:常量不能赋值.(*这是说指针指向的空间,指针本身是可以赋值的);
                    如:char *p="itheima";
                        p[0]='m'//错误; 不能对指针所指空间的常量进行改变.
                        p="itcast";//正确. 指针本身并不是常量.里面存的地址可以变化.


5.指针与函数
    函数的指针定义:
        类型 (*指针名)(参数类型);
        如:int (*p)(int);
        表示如下函数的指针类型:
        int add(int a){
            return 0;
        }
    赋值:
        指针名=函数名;
        如:p=add;
    操作:
        1.调用函数:
            指针名(实参);
            如:p(5);   


评分

参与人数 1黑马币 +12 收起 理由
昊远 + 12 总结的不错, 觉得指针学的太渣了. 总结.

查看全部评分

13 个回复

倒序浏览
不错不错!!!继续努力吧!
回复 使用道具 举报
努力加油吧!
回复 使用道具 举报
沙发没抢到
回复 使用道具 举报
好   感谢分享  
回复 使用道具 举报
好棒 赞一个!
回复 使用道具 举报
dddlinux 来自手机 中级黑马 2015-8-14 16:09:57
7#
抢沙发喽
回复 使用道具 举报
加油加油!
回复 使用道具 举报
好东西。
回复 使用道具 举报
好犀利,赞一个
回复 使用道具 举报
qsn0922 来自手机 中级黑马 2015-8-17 07:57:42
11#
总结的好清晰啊,刚看完指针,现在在学结构体了。
回复 使用道具 举报
传奇 来自手机 中级黑马 2015-8-17 15:51:10
12#
还没学到!谢谢总结
回复 使用道具 举报
不错!厉害,虽然是学的安卓还是受教!
回复 使用道具 举报
ios 基础班 ?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马