zoukankan      html  css  js  c++  java
  • 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 
    " , a , b , a+b);
    10 }
    11 
    12 void Sub(int  a , int  b ) {
    13     printf("%d - %d = %d 
    ", a, b, a - b);
    14 }
    15 
    16 void Mul(int a, int b) {
    17     printf("%d * %d = %d 
    ", a, b, a * b);
    18 }
    19 void Div(int a, int b) {
    20     printf("%d / %d = %d 
    ", 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 ; -----常量指针,其地址不能改变。但是改地址的值可读可写。

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

  • 相关阅读:
    CSS中文API
    廖雪峰Git教程
    数据操作的几个名词即model、dal、dao、orm和ar 解释
    Jetty
    Git介绍与使用
    c3p0、dbcp、druid三大连接池对比
    (转)JavaWeb——Servlet(全网最详细教程包括Servlet源码分析)
    08 bash特性--shell脚本编程入门
    07 grep命令与正则表达式
    06 I/O重定向与管道符
  • 原文地址:https://www.cnblogs.com/gongxijun/p/4359525.html
Copyright © 2011-2022 走看看