指针怎么理解指针

指针的深入理解(1)_ASP.NET技巧_动态网站制作指南
指针的深入理解(1)
来源:人气:145
& & & &关于指针的知识,我整理了笔记。同时参考了《你不再害怕指针》这篇优秀的文章。
从最简单最基本的指针开始,慢慢深入到复杂。
在讲解指针之前,我是先了解了c/c++中的内存管理知识。这样有助于加强对指针的知识的深入的理解。
关于内存管理,访问博客:http://blog.csdn.net/chen/article/details/
----------------------------------------------------------------------------------------------------------------------------------------------
指针:一块内存的地址.
指针变量:用来保存某变量的地址的变量
两者关系:指针变量里面存的是某变量的地址
一般变量和指针变量的区别:
一般变量:存放的是数据本身,访问方式称为直接访问方式。
指针变量:存放的是数据的地址,访问方式称为间接访问方式。
-----------------------------------------------------------------------------------------------------------------------------------------------
关于网友们对指针本身是否存在一个地址的问题,颇有争议。
为了解决这个问题,我在vc6.0环境下编译运行以下段代码:
#include&stdio.h&
int main()
intf(&指针p本身的地址:%d\n&,&p);
printf(&变量a的地址:%d\n&,&a);
printf(&指针变量p指向变量a的地址:%d\n&,p);
printf(&指针变量p指向变量a的地址,其地址的值:%d\n&,*p);
}为了便于理解,我假设指针p本身的地址为pppp,变量a的地址为aaaa。
用pppp,aaaa表示各自地址,虽然地址书写不合法,但是便于理解,只能这么干了)
输出结果:
指针p本身的地址:pppp
变量a的地址:aaaa
指针变量p指向变量a的地址:aaaa
指针变量p指向变量a的地址,其地址的值:1
分析结果:
//系统为变量a分配的首地址为aaaa
指针变量p定义时,本身占有内存,系统为其分配内存地址pppp.
当p=&a(变量a的地址赋值给指针变量p,也就是说指针变量p指向了变量a的地址)时,
指针变量里面存放的就是aaaa地址.但是指针p本身的地址仍然是pppp.
--------------------------------------------------------------------------------------------------------------------------------------------
变量a的值,变量a的地址,指针变量p,指针的关系:
指针变量相当于学校这个整体,指针相当于学校的地址。
变量a相当于小王这个人,变量a的值是小王的书本。
变量a的地址是小王的家庭地址。
这样可以说:
学校记录了小王的家庭地址。
如果有人想找小王借书,可以通过访问学校的地址,来寻找学校已经存进去的小王的家庭地址,然后可以
间接访问小王的家庭地址,可以借到小王家地址里面的书本。
-----------------------------------------------------------------------------------------------------------------------------------------------
p,*p,&p的概念:
p:p是一个指针变量的名字,表示此指针变量指向的内存地址,如果使用cout&&p来输出的话,
它将是一个16进制数。
*p:表示此指针指向的内存地址中存放的内容,一般是一个和指针类型一致的变量或者常量。
&p:&p取指针p的地址,&是取地址运算符.定义指针变量p,系统就为其开辟内存,分配指针本身的地址。
如果定义一般变量a,那么&a就是系统为其开辟一个内存,分配变量a的地址。
------------------------------------------------------------------------------------------------------------------------------------------------
指针和常量的问题:
#include&stdio.h&
int main()
int *p=(int *)5;//指针变量存储的是常量5
printf(&指针变量p指向某个地址:%d\n&,p);
}输出结果:
指针变量p指向某个地址:5
分析结果:
输出结果中的指针变量p指向了常量5,因为指针变量把5这个当做了某个地址来存进去。
至于为什么要用(int *)5,下面会讲到。
-------------------------------------------------------------------------------------------------------------------------------------------------
对于常量是否占有内存,网友们对此也有些不同的观点。
我认为有些常量(但有些常量不占有内存)是占有内存的。
占有内存的常量:字符串常量(字符串常量会放在一个专用的字符串池内存块中,或者放在静态数据区中。),const常量(不是真正意义上的常量,要占用内存空间)。
不占有内存的常量:字符型常量,整型常量(浮点型常量占有内存)。
------------------------------------------------------------------------------------------------------------------------------------------------
不占有内存的常量,它存在于常量存储区这个特殊的存储区里面。
常量存储区是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改)。
还有一种关于一些常量不占有内存的说法:
这类不占有内存的常量类似于汇编语言的立即数。读到一条指令,带有立即数,把立即数放到寄存器。
对于字符型常量(例如'a')和整型常量(例如1,2,3),他们属于立即数,写在代码里面的。他们存放在寄存器上的
没有所谓的内存和地址。因为寄存器和内存地址是两码事,没必要在内存上存放这类不占有内存的数值。
字符串常量和字符型常量
取地址的区别:
C/C++只可以用指针取字符串常量的地址,该类被认为是左值,而其他的字面值常量(literal constant),则被认为是右值,不允许取地址。至于const常量,只能说是一个const修饰的只读变量,和字面值常量不同。
------------------------------------------------------------------------------------------------------------------------------------------------
如果把int *p=(int *)5;改成int *p=5或者int *p=&5就会报错.
在这里int *p=&5,有些网友就误以为常量是没有地址的,也就是没有内存的。
我认为这种说法是错误的。上面我已经讲过,有些常量存在于特殊的常量存储区,或者存在于寄存器中,。
常量是不能取到地址的,就算取得到也是没有意义的。
int *p=5报错,因为指针变量和常量两者的数据类型不一样。一个是int*,一个是const int.
所以int *p=(int *)5;是把普通的常量强制转换成返回整型数据的指针。
优质网站模板千锋教育-做有情怀、有良心、有品质的IT职业教育机构
400-811-9990
当前位置:&>&&>& &>& 正文
学习iOS开发C语言指针的理解
  C语言是的基础,很多人学习过程中难免急功近利走入误区,不少人是看中的高薪进入开发行业,因此,学习iOS过程中很容易忽视小问题而主要学习自以为能高薪就业的知识,要知道,iOS是高技能行业,对专业性技术要求非常高,这就要求开发者具备扎实的iOS基础,对基础来说,知识点没有大小和轻重之分,都是构成后期开发必不可少的,千锋机构作为行业最具权威的iOS研发和人才培训中心,是教育部教育管理信息中心认证的全国移动互联网人才实训基地,专业性的教学赢得行业一致认可,在注重学员理论与实战结合的同时对学员的基础要求非常高,进阶制的教学保障学员不落下一个知识点,让学员在开始就具备超越其他开发者的基础技能。
  在学习C语言过程中要数值指针的定义;
  1:指针是一个地址,指向的是个类型:
  我们知道,c语言中的类型有int,char,bool(这个不常用),一般我们使用int,char就可以满足一般的类型需求的,如果对于变量的长度过大,就是用long ,float,double,关于各个类型使用的的长度问题,可以使用sizeof(int)或者sizeof(long)来查看各个类型,在系统中的小。
  而指针就是一个8个字节(64系统)。
  2:指针指向的是地址,地址指向的是内容:
  我们需要一个变量,来存储地址,这个变量的值是地址,但是我们可以通过修改变量的值,来不断的改变地址,但是,我们如果需要改变该个地址的值的话,就需要,对地址的值进行修改,而不改变地址。
  int a = 10;
  int *p ;
  p = &a;
  *p =11;
  这里我们看到,p 是一个变量,我们使用p来存储变量a的地址,这是,我们使用*p对于这个变量进行赋值,那么a的值最后,是多少呢,结果是11,因为我们使用*p赋值,就相当于a=11,赋值效果一样的。
  3:指针的指针,是面对于指针的变量:
  我们说,指针的指针的时候,就有点不清楚了,到底怎么区分指针和指针的指针呢。
  char *p;
  char **pr;
  pr = &p;
  我们这样看就清楚了一点,char *(*pr); *pr是一个存储的值为指针的变量,pr就是存储上个变量地址的变量。整合起来就是,pr是一个存储的值为指针的地址的变量。
  这样,我们就基本,对于指针有一个直接的了解了。
北京天丰利校区(总部)地址:北京市海淀区宝盛北里西区28号天丰利商城4层
北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术学院广场服务楼2、3层
咨询电话:400-811-9990
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训、好程序员
深圳西部硅谷校区地址:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619
深圳大学城校区地址:深圳市南山区留仙大道1201号大学城创客小镇16栋3楼
咨询电话: 5/(硅谷) 0-801(大学城)
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训、好程序员
上海校区地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
咨询电话:400-811-
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训、好程序员
郑州校区地址:郑州市二七区航海中路60号海为科技园C区10层、12层
咨询电话:0
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
广州校区地址:广州市天河区元岗路310号智汇park创意园E座5层
咨询电话:020-
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
大连校区地址:辽宁省大连市高新园区爱贤街10号大连设计城A座901
咨询电话:400-811-9990
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
武汉校区地址:武汉市光谷大道61号智慧园21号楼2层
咨询电话:027-
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
成都校区地址:成都市武侯区科华北路62号力宝大厦N(北楼)18楼
咨询电话:400-811-78771
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
西安校区地址:西安市雁塔区高新六路52号立人科技C座西区4楼
咨询电话:029-
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
杭州校区地址:浙江省杭州市江干区九堡旺田书画城A座4层
咨询电话:400-811-893632
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
青岛校区地址:青岛市市北区龙城路卓越世纪中心3号楼8层801
咨询电话:0
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
重庆校区地址:重庆市高新区科园一路2号大西洋国际12-1
咨询电话:400-811-83009
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
长沙校区地址:湖南省长沙市岳麓区麓谷企业广场A2栋三单元306号
咨询电话:0
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
哈尔滨校区地址:哈尔滨市松北区创新一路699号 科技创新城19号楼B座五楼
咨询电话:400-811-173191
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
南京校区地址:南京市建邺区应天大街780号应天智汇产业园弘辉园1幢2楼
咨询电话:400-811-9990
面授课程:HTML5大前端培训、全链路UI/UE设计培训、PHP全栈+服务器集群培训、JavaEE+分布式开发培训、大数据+人工智能培训、
Unity游戏开发培训、Python培训、云计算+信息安全培训、全栈软件测试培训、智能物联网+嵌入式培训、Android培训、iOS培训
了解千锋动态关注千锋教育服务号
扫一扫快速进入千锋移动端页面
扫码匿名提建议直达CEO信箱
京ICP备号-3 京公网安备55号没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!投稿:81粉丝:648分享--dynmicweibozoneqqbaidu将视频贴到博客或论坛视频地址复制嵌入代码复制微信扫一扫分享收藏0硬币--稍后看马克一下~用手机看转移阵地~用或其他应用扫描二维码手机下视频请使用扫码若未安装客户端,可直接扫此码下载应用看过该视频的还喜欢正在加载...miniOFF指针的理解_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
指针的理解
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩10页未读,
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 怎么理解指针变量 的文章

 

随机推荐