找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2357|回复: 0
收起左侧

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

[复制链接]
ID:105323 发表于 2016-2-13 00:50 | 显示全部楼层 |阅读模式
昨天给朋友讲了 3个问题,
A〉什么是函数指针,本质是?指针的本质?
B〉什么是类型,类型的本质是?
C〉什么是强制类型转换,本质是?作者 张世光 亿通科技软件部 060913 QQ:87895224 MSN:Z_55@hotmail.com
A〉什么是函数指针,本质是?指针的本质?

   voidfun();  //函数声明
   void(*ptrfun)();//函数指针变量ptrfun 的声明,表明ptrfun这个指针指向一个 voidfun()函数类型的函数地址。
〉函数的名字 代表函数的地址;
所以,可以这样
  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〉什么是强制类型转换,本质是?
强制类型转换 的本质是程序员告诉编译器“你不用担心,这里的类型变化是正确的”。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表