指针学习《一》

来源:互联网 发布:天猫和淘宝有什么关系 编辑:程序博客网 时间:2024/04/30 00:44

最近学习了以下指针,觉得很有意思也很灵活,单也很难随心所欲的使用,下面把我学习的一些笔记供大家看看,欢迎大家指正错误。

        指针其实也是一种变量,只是这种变量很特殊--专门存储地址的变量 。对于变量的值我们可以任意操作 ,指针变量也一样(这有点扯远了,后面会用UCOS中的消息邮箱来具体介绍把指针变量的值作为数据参数)。

        我遇到过的指针:普通指针(一级指针) ,常量指针,常指针,二级指针 ,指向一维数组的指针(相当与二级指针),指针数组,函数指针。

        普通指针用的最多。就是指向变量的存贮地址(存储单元),这个就不多说了。

       常量指针: 指针指向的地址内容是不可修改的,但是他的指向可以修改。

                如:char name[6] ="abcde"  ;const char  *pname = name ;   pname = "zhang";//允许,改变指向;

                        pname[2] = 'u';//错误;  但是name[2] = 'u' ;可以改变pname输出的字符串。

              总之,通过常量指针访问的变量值是不变的 ,但是我们可以改变指针的指向,为了明显区分常指针我把他称为指向变量值不可变。

     常指针:指向指针常量的指针 ,也就是指针变量值是常量(指向地址不可变),指向一固定的存储元。         如:char name[6] ="abcde"  ; char  *const pname = name ;   pname = "zhang";//禁止,变量值不能改;

                      pname[2] = 'u';//真确,只是使用了指针变量值,没有改变其值。   name[2] = 'u' ;//也可以,与指针无关

     我是这样记忆的:const 是靠近数据类型还是变量名,如果靠近变量名则变量的值不可修改(常指针),靠近数据类型则该类型的变量值不可修改(常量指针)

      二级指针:指向指针的指针 ,这个没什么好说的 。

      指向一维数组的指针:他其实也是二级指针,定义 type (*p)[4] ,定义指向包含4个元素的一维数组的指针。         *(p+1)指向下一个一维数组。*(*(p+i)+j)  ,获得第i个数组的第j个元素的值

      指针数组:数组元素都是指针的数组。定义 *p[4],包含4个指针变量的数组,注意区分指向一维数组的指针。

     函数指针:把函数当作变量来使用,在系统中用的比较多,比喻很多回调函数。

    我觉得一般可以分以下几个步骤来完成函数指针的使用:  1      定义并申明函数体,这更定义普通函数没有什么区别。   2       申明函数指针,这个地方要注意,要清楚你要指向那些函数,因为申明函数指针时要指明返回数据类型,形参,被指向的函数返回数据类型,形参必须与其严格一致,所以说一个函数指针只能指向某一类型的函数。 申明: int  (*pname)(int ,int ) =NULL 。    3      赋值(指向具体函数),在使用前函数指针要指向具体函数 ,而函数名实际上也可以理解为一个指针。 赋值  pname = add ;     4      使用函数函数指针  ,使用时一定要带实参,  使用  (*pname )(100,200) 他就相当与执行 add(100 ,200)。

      在我的眼中不管是地址还是变量值在内存中都是普通数据,只要是数据,在语法允许的范围内可以随意控制,这也是指针灵活和可怕之处。比喻  int  a =1000 ,这1000 是一个地址还是数据 ,不好说这要看我怎么定义他。如果我定义他为地址就是地址了,只不过我要经过一些处理。 char *p = (int *)a;   这是把a的值强制转换为指针后赋值给p。     

        学到这里我对UCOS消息邮箱一节有了新的认识。UCOS中消息邮箱的消息内容是依托在某个任务的变量中,这个变量的内容可以由拥有该变量的任务任意改动 ,如果我要消息发送后就不能改动那该怎么办??     这是我们只有把消息内容存储到ECB中才会不受外界影响  ,OSMboxPost (OS_EVENT *pevent, void *msg) 中的msg就是一个指针 ,如果我要传递100 这个不允许修改的常数过去就可以利用上面的方法 数据类型无所谓,我只是借用了一下指针变量的存储空间来暂时存储一下信息  ,这个在接受方一定要会对这个数据解码 不然就问题大了。

        不知不觉也写了折磨多 ,这是第一次写博客 有些地方很罗嗦请大家见谅。  

原创粉丝点击