免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: DNFCF
打印 上一主题 下一主题

[C] 对指针的一个疑问? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-01-04 09:59 |只看该作者
比如说吧:
(void *)0;
(int *)0;
(char *)0;
(double *)0;
.........
可以这样写吧,他们有区别吗?
DNFCF 发表于 2011-01-04 09:46



    当然有区别
    这些表达式的运算截然不同
    比如从
(void *)0  + 1;(非法)
(int *)0  + 1;
(char *)0  + 1;
(double *)0  + 1;
就不难看出他们的区别

论坛徽章:
0
12 [报告]
发表于 2011-01-04 10:02 |只看该作者
回复 5# goldenfort




比如说吧:
(void *)0;
(int *)0;
(char *)0;
(double *)0;
.........
可以这样写吧,他们有区别吗? 会相等吗?

论坛徽章:
0
13 [报告]
发表于 2011-01-04 10:02 |只看该作者
有些高级语言是无类型的
雨过白鹭洲 发表于 2011-01-04 09:58

比如?
再有,数据的表示和运算规则在这些语言中是如何处理的呢?这个问题恐怕是回避不了的吧

论坛徽章:
0
14 [报告]
发表于 2011-01-04 10:05 |只看该作者
本帖最后由 DNFCF 于 2011-01-04 10:30 编辑
当然有区别
    这些表达式的运算截然不同
    比如从
(void *)0  + 1;(非法)
(int *)0  + ...
KBTiller 发表于 2011-01-04 09:59



    (void *)0  + 1;(非法)怎么会非法呢?例如:void *i=(void *)((void *)0+(void*)1)

论坛徽章:
0
15 [报告]
发表于 2011-01-04 10:07 |只看该作者
高级语言的类型在编译时有一套自有的转换规则,表面是无类型

论坛徽章:
0
16 [报告]
发表于 2011-01-04 10:34 |只看该作者
回复 14# DNFCF


    void *i=(void *)((void *)0+1);这句话我在vs2008上面运行提示错误:“void *“未知类型大小。
你觉得这句话运行的结果应该是什么呢? (void *)1 吗? 那岂不是当成char 的步长了。还是别的?
觉得这句话应该是有问题的,指针加上一个整数,移动的长度应该是:整数乘以步长(步长就是这个指针的类型),这里指针的类型不确定,如何计算结果。

论坛徽章:
0
17 [报告]
发表于 2011-01-04 10:52 |只看该作者
回复  DNFCF


    void *i=(void *)((void *)0+1);这句话我在vs2008上面运行提示错误:“void *“未知 ...
liuhe212 发表于 2011-01-04 10:34

"void*未知类型" 那我把void* 改为char*行吗?
(void *)1也可以表示步长吧?当然要在数组中才有意义。

论坛徽章:
0
18 [报告]
发表于 2011-01-04 11:25 |只看该作者
比如说吧:
(void *)0;
(int *)0;
(char *)0;
(double *)0;
.........
可以这样写吧,他们有区别吗?
DNFCF 发表于 2011-01-04 09:46



单纯对指针的转换可能没有意义, 因为指针变量里面存放的东西应该是没有类型区别的(实际上编译器也只是报警告)
但是对指针取值或对指针进行加减运算的时候就跟类型有密切关系了

还有在编译阶段就可以发现不同类型指针间的操作,这可以在早期发现很多问题。

论坛徽章:
0
19 [报告]
发表于 2011-01-04 12:00 |只看该作者
高级语言的类型在编译时有一套自有的转换规则,表面是无类型
bs 发表于 2011-01-04 10:07



    谢谢!
    本质上还是有类型
    能给分析一下各自的利弊吗

论坛徽章:
0
20 [报告]
发表于 2011-01-04 12:02 |只看该作者
指针类型用于 指导 汇编。。。
不同的类型生成的汇编代码不同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP