C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组

 1 #include<stdio.h>

 2 #include<stdlib.h>

 3 #include<windows.h>

 4 /* 举列子说明什么是函数指针 */

 5 

 6 //以一个加减乘除

 7 

 8 void Add(int a, int b){

 9     printf("%d + %d = %d \n" , a , b , a+b);

10 }

11 

12 void Sub(int  a , int  b ) {

13     printf("%d - %d = %d \n", a, b, a - b);

14 }

15 

16 void Mul(int a, int b) {

17     printf("%d * %d = %d \n", a, b, a * b);

18 }

19 void Div(int a, int b) {

20     printf("%d / %d = %d \n", a, b, a / b);

21 }

22 

23 

24 

25 //对于数组指针。

26 void func() {

27     int * py[5] ;   //定义一个数组指针

28     int aa[] = { 1,2,3,4,5,6 };

29        py[0] = aa;

30     for (int i = 0; i < sizeof(aa) / sizeof(int) ; i++)

31       printf("%d  " , py[0][i]);

32      puts("");

33 }

34 //对于指针数组

35 void  funcp() {

36 

37     int(*pt)[5] ;

38     int aa[] = { 1,2,3,4,5 };

39          pt= &aa;

40       for (int i = 0; i < 5; i++) {

41           printf("%d  ",(*pt)[i]);

42       }

43       puts("");

44 }

45 

46 int main( void ) {

47     system("echo  下面现实的是指针数组  ");

48     funcp();

49     system("echo  下面现实的是数组指针  ");

50     func();

51   //函数指针的用处

52     system("echo  下面现实的是函数指针  ");

53     void (*p)(int, int)= Add;

54     p(1,2);

55   //函数数组指针 ,这里需要区分指针数组和数组指针

56     /*

57      ...[]优先级高于*

58      数组指针 : (*p)[]  像函数指针一样,表示对于一个数组的指针,指针的类型是数组

59        int  a[10];

60        int (*p)[]=a; 

61      指针数组 : *p[]  ==*(p[])  数组里的每一个元素为都为指针  

62 

63     */

64     system("echo --下面现实的是函数指针数组----  ");

65     void(*ps[])(int, int) = { Add , Sub , Div ,Mul };

66     for (int i = 0; i < 4; i++) {

67              ps[i](1,2);

68     }

69     getchar();

70   return 0;

71 }

 C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组

由上面那个列子:

我们就可以大概知道这些:

       指针  ---》指向的是一个地址、

       数组指针:  形如  int *p[4]  -->说的是  p[0]~p[3]均为指针:

   如图:

     C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组

      对于指针数组:  形如: int (*p)[5] ;

    这 *p是一个指针,但是不是一个 普通的一级指针,有点像二级指针,但是没有二级指针那么大的权限,这样比喻吧:

举个日常的列子:

早上我们都要吃早饭(你丫,要是硬要说你不吃,那就不吃好了! ),但是至于要吃什么--随便,但是规定你,只能吃五碗。指针数组就是这样,你可以指向任何东西,但是都有限制(元素有限制)。

      函数指针: 顾名思义是指向函数的指针, 形如:  void (*p) (int a ) ;  这个指针的指向范围就更加的小了,就是只能指向函数。就好比,你早上要么不吃早饭,要吃,就得给老子吃胡萝卜啥的一样一样的。 

     至于函数指针数组,函数数组指针,其实搞懂了,前面的几种含义,后面的这些指针的意思,大概都可以有清晰的认识。

  const int *p ;   ----指针常量,其所指向的对象,只能有读取的权限,并没有写入的权限。

  int * const p ; -----常量指针,其地址不能改变。但是改地址的值可读可写。

   -----------------以上都是依据自己编程经验的理解,以及平时使用的理解来写的。如果有误,还请指点。--------------------------

你可能感兴趣的:(c/c++)