Chinaunix首页 | 论坛 | 博客
  • 博客访问: 304131
  • 博文数量: 82
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 490
  • 用 户 组: 普通用户
  • 注册时间: 2016-06-13 10:58
文章分类

全部博文(82)

文章存档

2018年(2)

2017年(9)

2016年(71)

我的朋友

分类: C/C++

2016-05-28 09:00:38

1. int类型是16位变为32位时,可以做以下操作,方便快速移植

typedef  int   INT16

typedef  long  INT32

替换成:

typedef  short  INT16

typedef  int    INT32 
  

2. 不使用 #define  char_ ptr  char* 来定义变量的原因

当定义:

   char_ptr  p1,  p2

这时为:

   char  *p1,  p2;
这时p1为指针变量,而p2只是一个char型变量,并未被定义成指针。因此重新命名数据类型时,最好用typedef结构:typedef  char*  char_ptr;  
 

3. Typedef可以定义函数指针,有以下三种形式

(1) 返回类型(*函数名)(函数参数)

char  (*pFun)(int);

pFun是一个函数指针,指向一个返回类型为int,传入参数为int的函数。

例如:

      char PP(int a) //新定义一个函数

 {

 };

 pFun = PP;       //将函数入口指针传入pFun

 pFun(2);         //pFun可以像pp(int a)那样使用了

(2) typedef 返回类型(*新类型)(函数参数)

typedef  char  (*ppFun)(int);

同上,只是这时ppFun是一个新类型可以通过ppFun定义一个新的函数指针。

例如:

    ppFun pFun;     //定义pFun为函数指针变量

    char PP(int a)  //新定义一个函数

{

};

pFun = PP;      //将函数入口指针传入pFun

pFun(2);        //pFun可以像pp(int a)那样使用了

(3) 直接定义一个返回函数指针的函数

例如:
      
int  (*Fun(int a))(int, int)
     
{
      
  Return  fun1(a);
     
}

该函数中fun1()是已经定义了的一个返回函数指针的函数,a是该函数传入的参数,Fun是函数名。该函数返回的是一个返回类型为int,函数参数为(intint)的函数指针。
 

4. 测试代码

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. typedef int (*Fun)(int, int);

  3. int add(int a, int b)
  4. {
  5.     return a + b;
  6. }

  7. int sub(int a, int b)
  8. {
  9.     return a - b;
  10. }

  11. int mul(int a, int b)
  12. {
  13.     return a * b;
  14. }

  15. int div(int a, int b)
  16. {
  17.     return b ? a/b : -1;
  18. }

  19. Fun cal(char a)
  20. {
  21.     switch(a)
  22.     {
  23.         case '+':
  24.             return add;
  25.         case '-':
  26.             return sub;
  27.         case '*':
  28.             return mul;
  29.         case '/':
  30.             return div;
  31.         default:
  32.             return NULL;
  33.         return NULL;
  34.     }    
  35. }

  36. int (*calculate(char a))(int, int)
  37. {
  38.     return cal(a);
  39. }

  40. int aw(int a, int b, char op)
  41. {
  42.     Fun ft = cal(op);
  43.     int (*fg)(int, int) = calculate(op);
  44.     
  45.     if(ft)
  46.     {
  47.         return fg(a, b);
  48.     }
  49.     else
  50.     {
  51.         return -1;
  52.     }
  53. }
  54.   
  55. int main(void)
  56. {
  57.     printf("%d\n", aw(2,2,'*'));
  58. }

阅读(853) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~