黑马程序员技术交流社区

标题: 指针问题,既然指针长度与类型无关,还分类型干嘛 [打印本页]

作者: slq0378    时间: 2015-4-11 18:51
标题: 指针问题,既然指针长度与类型无关,还分类型干嘛
指针 是保存内存地址的变量,为什么指针还要有类型区分??

作者: 陨石    时间: 2015-4-11 19:06
为了方便计算吧,c是弱语言如果把一个地址长的值赋给地址短的值,数据就会溢出,内存管理就会混乱,但是在强语法比如oc上就会有万能指针了。
作者: xiniuniu    时间: 2015-4-11 19:27
,在声明一个指针变量的时候,就已经告诉编译器,这个变量应该存放的数据是一个地址,可以从这个地址中获取一个指定类型的数据。有了类型说明,编译器才会知道从那个地址开始应该读取多少个字节,并把这些数据解释为何种类型。所以给一个指针赋值时,赋值操作符“=” 右边的数据类型应当和指针声明的类型相同。如果等号右边所给的数据类型和指针变量类型不符,那么编译器就会报错。这样做的原因是为了程序设计的安全和正确性。假设我们指针变量类型为int* 而右边给的确是一个short*,如果编译器不报错,并编译通过,程序运行时读取那块地址开始的4字节空间,显然多读取了两个字节,你怎么知道多读的两个字节是什么。如果那多的两个字节是另外一个重要的数据变量呢,这时就会被你的误操作所修改,导致程序出错。如果我们的产品是为医疗设备做开发,很有可能会引起一场医疗事故。如果我们为某某原子机构做开发呢,有可能一个蘑菇云就诞生了!!! 所以指针变量赋值要保证两边类型一致,除非你知道自己为什么这样做。当你想把等号右边类型不符的数据强制赋值给指针,那就应该告诉编译器,编译器老哥,把这个数据当作和指针类型一样的类型处理,就这么干。既然我们程序员已经发号师令了,那这时编译器也就没什么话说了。
作者: 毛大鹏    时间: 2015-4-11 23:03
指针的类型是用来给它里面存储数据分配内存的,如果是个Int类型的指针,它里面的一个数据分配的内存就是4个字节,如果你存入一个long型数据,就会丢失数据
作者: longer057    时间: 2015-4-11 23:05
取值的时候用的到啊,去数组时,知道应该取几个字节,+1的时候该蹦几个字节
作者: wxy19891017    时间: 2015-4-11 23:12
毛大鹏 发表于 2015-4-11 23:03
指针的类型是用来给它里面存储数据分配内存的,如果是个Int类型的指针,它里面的一个数据分配的内存就是4个 ...

这个是正解,老师的视频中说到过。
作者: slq0378    时间: 2015-4-12 10:50
wxy19891017 发表于 2015-4-11 23:12
这个是正解,老师的视频中说到过。

恩,就是这样了。
作者: 枫宇翔    时间: 2015-4-12 11:05
陨石 发表于 2015-4-11 19:06
为了方便计算吧,c是弱语言如果把一个地址长的值赋给地址短的值,数据就会溢出,内存管理就会混乱,但是在 ...

你是在逗我,你告诉我C语言哪里是弱语言,C语言号称最接近底层的语言,对于错误检查很严谨的。OC才是弱语言,你自己去实现一下,OC的里面方法不再@interface里面声明,就在@implementation里面实现都不会报错。而且OC对于一些错误都不报错,都是警告,这才是弱语法
作者: 陨石    时间: 2015-4-12 11:09
枫宇翔 发表于 2015-4-12 11:05
你是在逗我,你告诉我C语言哪里是弱语言,C语言号称最接近底层的语言,对于错误检查很严谨的。OC才是弱语 ...

请自行百度弱类型语言,学习的地方不是用来斗的。
作者: 程序小白猿    时间: 2015-4-12 11:11
楼主基础视频C没看完,鉴定完毕

作者: 寒殇    时间: 2015-4-12 11:15
便于保存数据
作者: 枫宇翔    时间: 2015-4-12 12:39
陨石 发表于 2015-4-12 11:09
请自行百度弱类型语言,学习的地方不是用来斗的。

:L汗,技术问题不是就来探讨的么,争论几句就说斗,你觉得我错了,就百度一下资料回复一下就行了,只要能说服我就行了,你这态度那以后别人对你的观点产生质疑,你怎么办。看来你很少和别人交流问题。或者别人对你观点质疑的时候不理别人的那种人,比较固步自封,说几句就受不了的人
作者: sixleaves    时间: 2015-4-12 12:41
是存得地址和类型无关。读取的时候根据不同类型,读取的字节数是不一样的。
作者: slq0378    时间: 2015-4-12 16:50
程序小白猿 发表于 2015-4-12 11:11
楼主基础视频C没看完,鉴定完毕

正在看.................
作者: 陨石    时间: 2015-4-12 18:20
枫宇翔 发表于 2015-4-12 12:39
汗,技术问题不是就来探讨的么,争论几句就说斗,你觉得我错了,就百度一下资料回复一下就行了,只要能 ...

呵呵,我觉的你的言行超过了技术讨论的范围
作者: 枫宇翔    时间: 2015-4-12 23:46
陨石 发表于 2015-4-12 18:20
呵呵,我觉的你的言行超过了技术讨论的范围

哎,你还是太年轻了,小朋友多出去走走,这言行就受不了,那你以后怎么办
作者: 陨石    时间: 2015-4-12 23:54
枫宇翔 发表于 2015-4-12 23:46
哎,你还是太年轻了,小朋友多出去走走,这言行就受不了,那你以后怎么办 ...

也不知是谁受不了了,说一堆有的没的,跟他一毛钱关系没有的。
作者: 枫宇翔    时间: 2015-4-13 08:45
陨石 发表于 2015-4-12 23:54
也不知是谁受不了了,说一堆有的没的,跟他一毛钱关系没有的。

都是为你好啊,以后不要和别人讨论问题说那样的话,要注意一点,懂吗小朋友
作者: shane_west    时间: 2015-4-13 09:32
其实还是对优化性能好吧~
作者: 陨石    时间: 2015-4-13 10:20
枫宇翔 发表于 2015-4-13 08:45
都是为你好啊,以后不要和别人讨论问题说那样的话,要注意一点,懂吗小朋友 ...

大脸,好像谁都应该理你一样。
作者: 无声风铃    时间: 2015-4-13 10:23
编译器通过类型找到指针指向内容的首地址,然后按照该类型所占字节数出去内容
作者: 枫宇翔    时间: 2015-4-13 10:29
陨石 发表于 2015-4-13 10:20
大脸,好像谁都应该理你一样。

你真的好搞笑,挺逗的:lol:lol:lol:lol:lol




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