指针学习《一》
来源:互联网 发布:天猫和淘宝有什么关系 编辑:程序博客网 时间: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 这个不允许修改的常数过去就可以利用上面的方法 数据类型无所谓,我只是借用了一下指针变量的存储空间来暂时存储一下信息 ,这个在接受方一定要会对这个数据解码 不然就问题大了。
不知不觉也写了折磨多 ,这是第一次写博客 有些地方很罗嗦请大家见谅。
- 指针学习《一》
- 函数指针学习一
- 指针学习(一)
- 学习指针(一)
- 指针学习一
- C语言指针学习(一) ---- 指针是什么
- 指针学习系列(一):关于指针
- C语言指针学习 一
- C语言指针学习一
- C语言学习:指针学习一
- C和指针 学习笔记(一)
- 黑马视频学习笔记-指针(一)
- 《C与指针》学习笔记(一)
- Linux 下C语言 指针学习 一
- php数组指针学习笔记(一)
- C语言指针学习笔记一
- 【C++学习】【阶段一】指针&文件IO
- 指针学习的新理解一
- Ajax大赛题目及答案[收集]
- Asp.Net(C#) 遍历数据库表名,列名
- 还是在这里写吧
- DataGridView常见用法和FAQ汇总
- ThinstallVS.3330-LateShift
- 指针学习《一》
- 对误删文章的说明-Zee
- TOMCAT设置内存和连接数配置
- [经典推荐]事半功倍系列之javascript
- 用两个栈实现一个队列的功能
- 获取SQL Server的当前连接数
- 想法:网站首页数据全部用xml输出,利用xsl+Css布局
- 对powerbuilder11 to webform交互能力的失望
- Hibernate下配置proxool数据库连接池