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

时间:2022-05-05
本文章向大家介绍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 }

由上面那个列子:

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

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

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

   如图:

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

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

举个日常的列子:

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

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

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

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

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

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