为什么指针还要有类型区分

langkejianxin08 2012-07-11 10:11:25
刚开始学C++不太明白
指针 是保存内存地址的变量,为什么指针还要有类型区分??
...全文
1171 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-11-04
  • 打赏
  • 举报
回复
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
有点清眸 2014-11-04
  • 打赏
  • 举报
回复
程序编译时,指针类型让编译器知道了该指针该怎么解析。
超级能量泡泡 2014-11-04
  • 打赏
  • 举报
回复
编译器知道指针类型的话,就能知道对应引用的类型,如果是类对象的指针就可以通过->获得成员变量、函数了。如果没有给出类型,那就要像汇编一样麻烦了。
一根烂笔头 2014-11-03
  • 打赏
  • 举报
回复
指针数值运算,决定它如何算!比如char *pc和int *pi;执行pc++和pi++;那么pc加上1,而pi加上的是4.
追梦浮云 2014-11-03
  • 打赏
  • 举报
回复
引用 6 楼 PANHL97 的回复:
指针是没什么类型分的,但是指针指向的内存存储的数据就有类型, 指针的类型就是指向内存数据的类型 不告诉系统指向的是什么类型,系统就不知道该去多少连续内存作为一个数据
+1
lucifer886 2014-11-03
  • 打赏
  • 举报
回复
引用 5 楼 shenimenyilian 的回复:
[Quote=引用楼主 的回复:] 刚开始学C++不太明白 指针 是保存内存地址的变量,为什么指针还要有类型区分?? [/Quote] 谁告诉你指针是保存内存地址的变量?你从哪儿得到这个结论
那是什么?
jiandingzhe 2013-08-04
  • 打赏
  • 举报
回复
不知道类型,怎么使用它的所指物?
todd_leftcode 2013-08-04
  • 打赏
  • 举报
回复
很明显啊,表示指针保存的内存地址的变量的类型啊, 否则 你说输出 *p 的值, 谁知道你是要按整数输入还是按浮点还是字符 串还是。。。啊? 还有 *p3 = (*p1) * (*p2); 谁知道这是把两个整数相乘还是浮点还是。。。。啊?
lm_whales 2013-08-03
  • 打赏
  • 举报
回复 1
编程语言的出现,是为了用计算机,解决现实世界的问题的。 数据的类型,包含了两个方面的内容, 1) 数据如何存储,数据尺度--占多少字节. 2) 数据的含义,这种类型和现实世界的事物,概念有升么联系。 我们如何用编程语言中的数据,代表现实世界的事物。一种事物,用那种类型的数据来表示。 如果指针这种表示数据地址的数据,没有类型,我们只能在使用的时候,去确定其中存储的数据的类型。 这样的编程语言,使用起来很困难,实现起来难度也不小。 相信,没有几个编译器厂家,愿意开发这种编译器,也没有几个程序员,愿意使用这种编译器。 早期的basic 变量几乎没有类型,但是也几乎没有指针的概念。 有了类型这种概念,数据才能很好的使用。这种编程语言,我们用起来才方便。 指针有了类型,才可以被广泛使用。 没有类型的指针,你会设法让他重新拥有类型的。 但是原本应该拥有的,类型信息丢失了,会变得很难用。 相信你也不愿意,不喜欢,总是使用这种没有类型的指针。 PS: 另外,有些东西,当你掌握了以后,就知道为什么,是这个样子的了。 没掌握时,你可能会觉得不爽,很没有必要。 那是因为,你才开始学习的缘故,似乎为地址增加了类型,加大了学习难度。 其实不是这个样子的。 因为指针本来就应该拥有类型。 不同类型的数据,处理方式是不同的。 指针有了类型,而不是单纯的是一个地址。 我们才有办法操作指针的值---这个地址--中的数据指针所指的数据。 因为指针的类型,表示了指针储存的数据的类型。 int * p; p 指向整型数据。 int a; p=&a; //没错,整型指针储存整型数据--a--地地址。 *p=10; int b =*p; 没有类型的指针,如何进行以上操作。
alonehave 2013-08-03
  • 打赏
  • 举报
回复
引用 31 楼 alonehave 的回复:
我给楼主举个例子。比如你有个比较落后的MP4,你想要下载电影看,但是你这个MP4只能播放固定格式的影片。 那么你不但要在网上地址上下载你需要的电影(这是你的指针地址),你还需要转格式(指针的解引用)。
其实这个例子不是很准确,我的意思是,如果你想把指针运用到计算当中,你是有必要知道按什么数据类型来解引用的。就像有时候你用word打开excel表格出现乱码一样,你得知道按.xls的类型打开才能得到你想要的。这样比较好理解一点。
alonehave 2013-08-03
  • 打赏
  • 举报
回复
我给楼主举个例子。比如你有个比较落后的MP4,你想要下载电影看,但是你这个MP4只能播放固定格式的影片。 那么你不但要在网上地址上下载你需要的电影(这是你的指针地址),你还需要转格式(指针的解引用)。
lm_whales 2013-08-03
  • 打赏
  • 举报
回复
指针是个保存地址,或者直接就是地址的数据---这里的数据是指一些(变量或者常量,字面常数). 指针类型是个用于保存某种类型数据地址的类型. 指针变量是保存某种类型数据地址的变量. 这话是没有错误的. 1) 问题是指针指向的数据--即指针这个地址中存放的数据--,是有类型的,如果指针没有类型.如何知道那个地址里存放的数据的类型? 对于任何编程语言,没有类型的数据,都不知道该如何操作. 2)c,c++ 指针可以进行算术运算, 即指针+整型数据,指针-整型数据,指针自增,指针自减,指针相减,五种加减法。 如果指针没有类型,无法知道数据长度,C最重要的内容,指针运算无法进行。 3)没有指针类型,就没法知道数据的类型,指针也就没有存在的必要了。
顾小白xx 2013-08-03
  • 打赏
  • 举报
回复
好好看看书 其实有些事情没有为什么
zhctj159 2013-08-02
  • 打赏
  • 举报
回复
引用 18 楼 ilittleone 的回复:
[quote=引用 5 楼 shenimenyilian 的回复:] [Quote=引用楼主 的回复:] 刚开始学C++不太明白 指针 是保存内存地址的变量,为什么指针还要有类型区分?? [/Quote] 谁告诉你指针是保存内存地址的变量?你从哪儿得到这个结论
很明显是叫兽们叫的[/quote] 不知道18楼是怎么理解指针的
lm_whales 2013-08-02
  • 打赏
  • 举报
回复
类型对于C来说,主要数据长度,即这个类型是几个字节的。 其次才是类型的实质内容,即这个类型对应于现实世界的什么东西; 比如浮点数,float 4个字节,double 8个字节,其次浮点数对应数学中的实数。 这样 才会有小数点,尾数,指数以及符号,等浮点数类型对应的意义。 C++类型的非编程语言信息,比字节数更重要,应为C++,是一种面向对象的语言。 更重视类型的现实意义。 编程语言本身,类型信息,包含了 1)对于计算机,计算机语言的意义,即字节数,用于为变量和常数,安排内存和寄存器,以及指令中的操作数。 2)现实意义,这种类型,用于表达现实中的哪种东西。 指针是为了操作数据而使用的,数据类型和指针的类型密切相关。 1)指针运算,只有直到类型才能够进行。 2)数据的意义,只有指向某种类型的指针,我们才有办法解释所指数据的含义,才能够知道如何使用指针所指的数据。 无类型的指针 void * 就仅仅是一个地址,我们是没有办法,操作其中的数据的,因为我们不知道那个地址里,存放的是啥东西。 而void *也没有办法进行指针运算,因为不知道数据到底占有多少空间。 C,C++ 无类型的指针 void * 是一种方便的指针,用于操作任何数据。这是不需要知道,数据类型的场合使用的。 比如 malloc free C库函数 qsort 的函数指针 int (*compare)(const void*,const void*); qsort 是C的通用算法,相当于C语言的泛型算法。 int compare(const void*,const void*);这个函数需要我们自己定义; qsort这个函数的编写者,无法事先确定; 这个compare函数,应该传入那种类型的指针。 所以采用无类型的指针---void * 类型。 void * ,只有特使情况,才会使用。 正常情况下,指针都是有类型的。 特别C++是面向对象编程时,指针的类型非常重要。 C++的多态中,没有类型的指针,是不能使用的。
weiqiyun1986 2013-08-01
  • 打赏
  • 举报
回复
5楼亮了,连指针的本质都没搞清楚
ForestDB 2013-08-01
  • 打赏
  • 举报
回复
解引用时才能正确操作。
mujiok2003 2013-08-01
  • 打赏
  • 举报
回复
数据在计算机中都是01码,只有知道类型,才能解析为鲜活的数据。
net_assassin 2013-08-01
  • 打赏
  • 举报
回复
指针有类型之分是为了区分,地址指向的对象大小,好分配内存空间啊。p++之类的运算也要根据指针的类型计算步长
colorfulcode 2013-08-01
  • 打赏
  • 举报
回复
“类型”则是一种“格式”,当指针指向一片内存空间时,就需要通过它来告知用户该怎么“解读”这片内存。 例如只给你四个字节的空间而不给你类型信息,你能确定怎么用这四个字节吗?是解释成四字节的整形,还是解释成一个float,还是解释成一个字符串,还是其他什么? 使用指针需要时刻知道这个指针指向的数据类型,否则没法用了。
加载更多回复(20)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧