理解:指针数组/数组指针/ 函数指针/ 函数指针数组/ 指向函数指针数组的指针

一、指针数组与数组指针

1.指针数组:是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。

例如:int *p[3]


2.数组指针:是一个指针,指向了一个数组。

例如:int (*p)[3]



这其中涉及到了符号的优先级问题:“[ ]”的优先级高于“*”,所以p先和谁结合就表示谁。"int *p[3]" p先和[ ]结合,所以是数组,数组元素为 int * 型;"int (*p)[3]" “()”的优先级高于“[ ]”,p先和“*”结合,所以是指针,该指针指向 int 型数组的内容.

二、函数指针,函数指针数组.

1.函数指针:函数指针说的就是一个指针,但这个指针指向的函数,不是普通的基本数据类型或者类对象。

例如:void (*funcPointer)(double x); 

具体用法如下:

void (*funcPointer)(double x);  

void f1(double x){}  

funcPointer=f1; 

funcPointer是指针变量,它指向一个函数。这个函数有一个double类型的参数,返回值为 void * 型.

总的来说,函数指针就是指向函数体第一行可执行语句的一个指针。

2.函数指针数组:存储函数指针的数组。

例如:void (*funcPointerArray[3])(double x); 

具体用法如下:

以上5.6.7.又可以写为:void (*funcPointerArray[3])(double x) = {f1,f2,f3}


三、函数指针数组,函数指针数组指针.

1.函数指针数组:首先它是一个数组,数组元素为函数指针。

例如:char *(* a[4])(char *p);它是一个数组,数组名为 a ,数组内有四个指向函数的指针;

这个指针指向一些返回值类型为指向字符的指针,参数为指向字符的指针的函数。

2.函数指针数组指针:首先它是一个指针,这个指针指向数组,这个数组里面存的都是指向函数的指针。

例如:char (*(* a)[4])(char *p); 这个指针指向包含了4个元素的数组;

这个数组里面存的是指向函数的指针;

这个指针指向一些返回值类型为指向字符的指针,参数为指向字符的指针的函数。

3.函数指针数组的实现:计算器.

  1. #include <stdio.h>  
  2. int add(int a, int b)  
  3. {  
  4.     return a + b;  
  5. }  
  6. int sub(int a, int b)  
  7. {  
  8.     return a - b;  
  9. }  
  10. int mul(int a, int b)  
  11. {  
  12.     return a*b;  
  13. }  
  14. int div(int a, int b)  
  15. {  
  16.     return a / b;  
  17. }  
  18. int main()  
  19. {  
  20.     int x, y;  
  21.     int input = 1;  
  22.     int ret = 0;  
  23.     int(*p[5])(int x, int y) = { 0, add, sub, mul, div }; //转移表 
  24.         while (input)  
  25.         {  
  26.             printf( "*************************\n" );  
  27.             printf( " 1:add 2:sub \n" );  
  28.             printf( " 3:mul 4:div \n" );  
  29.             printf( "*************************\n" );  
  30.             printf( "请选择:" );  
  31.             scanf( "%d", &input);  
  32.             if ((input <= 4 && input >= 1))  
  33.             {  
  34.                 printf( "输入操作数:" );  
  35.                 scanf( "%d %d", &x, &y);  
  36.                 ret = (*p[input])(x, y);  
  37.             }  
  38.             else  
  39.                 printf( "输入有误\n" );  
  40.             printf( "ret = %d\n", ret);  
  41.         }  
  42.         return 0;  
  43. }  
  44. 运行结果:



猜你喜欢

转载自blog.csdn.net/enshadower/article/details/80230037