找一本《编译原理》看看你就明白了。我试着解释一下(放很久了,不知道有没有
记错,如有错误请指正):
在类似C这种语言的实现中,编译器会维护一个叫符号表的东西,那里面记录着变
量标识,变量的内存地址和变量的类型等,编译器会根据这些信息来决定如何处理
这个变量。
强制类型转换,实质上就是在传递参数或者赋值的时候,把符号表中的类型改变了
一下再继续操作(赋值或传参数)。
那时候没有怎么好好学《编译原理》,一则没时间,二则也看不大懂……
现在看来,能够决定你能力的最本质的东西还是李开复先生所讲的那四门最核心的
课程:
《算法》,《操作系统》,《数据库》和《编译原理》
扯远了,就此打住,呵呵……
Have fun!
Kermit Mei
--
KISS == Keep it simple,stupid~:-)
((struct S *) 0)->number 其实是将0地址强制转换为一个 struct S 类型的指针,
然后获取了其中的number成员。
>>> ((struct S *) 0)->number只是获取0
>> 这里的强制转换只是为了得到->number的类型,编译时编译器会分析得出。
>>
>> 这和其它一些转换还不一样,比如:
>>
>> int a = 0xf0000000;
>> short b;
>> b = (short) a;
>>
>> 这个转换就会直接影响生成的汇编。
>>
>>
>
> 这个星期周四,小组进行的讲座内容中涉及到了这个知识点,也是在讲座的过程中明白了到底是怎么回事,就是一句话:
> 这里提到的通过类型转换而得到的计算结果是由编译器来完成的.
>
> >
>
--
---------------------------------
Zhenwen Xu - Open and Free
Home Page: http://zhwen.org
黄虎才 wrote:typeof(a)是获取a的类型,如果a是int那么typeof(a) b就相当于int b。
> 2009/10/8 WANG Cong <xiyou.w...@gmail.com>
>
>
>> 黄虎才 <china...@gmail.com> writes:
>>
>>
>>> 我们在编写程序的时候,经常会使用到强制类型转换,例如有一个结构体
>>> struct S {
>>> ...
>>> int number;
>>> };
>>> 有下面这样一段代码:
>>> int a = 90;
>>> typeof(((struct S *) 0)->number) *p = &a;
>>> 当然,我们知道,现在p指向的是变量a的地址,现在问题就是,这里将常数0强制转换为指向结构体struct S的指针,
>>> 而这样的强制类型转换是怎样实现的呢?谢谢
>>>
((struct S *) 0)->number 其实是将0地址强制转换为一个 struct S 类型的指针,
然后获取了其中的number成员。
这是编译器来完成的