[转载]强制类型转换 类型的本质 指针的本质 函数指针

 
2010-04-01 9:58
昨天给朋友讲了 3个问题,
A〉什么是函数指针,本质是?指针的本质?
B〉什么是类型,类型的本质是?
C〉什么是强制类型转换,本质是?
作者 张世光 亿通科技软件部 060913 QQ:87895224 MSN:Z_55@hotmail.com
A〉什么是函数指针,本质是?指针的本质?

   void fun();   //函数声明
   void (*ptrfun)();//函数指针变量ptrfun 的声明,表明ptrfun这个指针指向一个 void fun()函数类型的 函数地址。
〉函数的名字 代表 函数的地址;
所以,可以这样
ptrfun =fun ;//给ptrfun赋值。此时,ptrfun 就是 fun 函数的别名;
在需要调用 fun()的地方,可以这样写
(*ptrfun)(); //等同于 fun(); //这就是别名的意义。
指针的本质是一个固定长度(32位系统上是4个byte)的空间中放置的内容是一个内存地址。
而指针类型的本质 就是对这个地址的解释方式。不同的指针类型,对即使相同的内存地址的解释 是不同的,受影响的空间大小也不同。受影响的空间的大小等于sizeof(类型)。
如 short i=0x1234;
short * psort = &i;
char *pchar = &i; //此时 pshort ==pchar;即指向了同一个地址;
那么 (*pshort) 和 (*pchar) 的值各是什么?
假设 sizeof(short)==2
       sizeof(char)==1

假如内存中这样:
---地址 0x1000--
|      0x34    |
----------------
|      0x12    |
----------------
那么,psort==0x1000 ,同时,pchar==0x1000 ;
那么,(*psort) 代表是 地址0x1000 和 0x1001 这两个字节的内容; <-----由其类型决定
        (*pchar)代表 地址0x1000 这一个字节的内容;         <<-----由其类型决定
B〉什么是类型,类型的本质是?
   类型是我们为了方便有效利用内存来表达我们的意思而作的语言上的区分,看上面的解释就可以了解为何有类型区分。这里我想讲另一个类型相关问题。
   有人问     TypeDef void (*PtrFun)();
           和 void (*ptrfun)(); 有什么区别?
   看使用方式,
PtrFun pfun;
void fun();
pfun = ptrfun = fun;

   由上面可以看出 PtrFun 是类型,而ptrfun是一个变量 。
   使用方式自然也有差别,PtrFun 用来定义函数指针变量。而ptrfun已经是一个函数指针变量,可以直接赋值使用。
      (*pfun)();
      (*ptrfun)(); //

C〉什么是强制类型转换,本质是?
强制类型转换 的本质是 程序员告诉编译器“你不用担心,这里的类型变化是正确的”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值