zoukankan      html  css  js  c++  java
  • C的指针和数组

    int i;    //定义整型变量i

    int *p;    //定义一个指向int的指针变量p

    int a[5];   //定义一个int数组a

    int *p[5];  //定义一个指针数组,其中每个数组元素指向一个int型变量的地址

    int (*p)[5];  //定义一个指向int[5]类型的指针变量

    int func();   //定义一个函数func,返回类型为int

    int *func();    //定义一个函数,返回类型为int*

    int (*p)();    //定义一个指向函数的指针,返回类型为int

    int **p;     //定义一个指向int的指针的指针,二级指针

    a[1]+2 = *(a+1)+2 = &a[1][2]     //第一行第二列元素地址

    *(a[1]+2) = *(*(a+1)+2) = a[1][2] // 第一行第二列元素的值

    多级指针

    int a;

    int *p = &a;    //指向整型变量a的指针,通过*p访问a

    int **pp = &p;   //指向int型指针p的指针,通过**pp访问a,通过*pp访问p

    int ***ppp = &pp;   //指向int **pp的指针,通过***ppp访问a

    函数作为参数

    1.不用typedef

    int *func1(int n)      ///定义一个函数,返回类型为int*
    {
    
      printf("%d",n);
    
    }
    
    int  *func2(int *(*p)(int ),int n)
    
    {
    
      return p(n);
    
    }
    
    int main
    
    { 
    
      int a = 1;
    
      int *p = func2(func1,a);
    
      return 0;
    
    }
    

    2.使用typedef

    int *func1(int n)      ///定义一个函数,返回类型为int*
    {
    
    printf("%d",n);
    
    }
    
    typedef int *(*P_INT)(int);    //定义P_INT是指向int *函数形参为int的函数的指针 ,即为指向func1函数的指针
    
    int  *func2(P_INT p,int n)
    
    {
    
      return p(n);
    
    }
    
    int main
    
    { 
    
      int a = 1;
    
      int *p = func2(func1,a);
    
      return 0;
    
    }
    

      

    进阶:定义一个函数的数组

    int *func1(int n)      ///定义一个函数,返回类型为int*
    {
    
    printf("%d",n);
    
    }
    
    typedef int *(*P_INT)(int);    //定义P_INT是指向int *函数形参为int的函数的指针 ,即为指向func1函数的指针
    
    int  *func2(P_INT p,int n)
    
    {
    
      return p(n);
    
    }
    
    int main
    
    { 
    
      int a = 1;
    
      int *p = func2(func1,a);
        
           P_INT arr[5];//原始定义 int *(*p[5])(int);
                                //这是一个数组,一共5个成员,每个成员都是指向int *函数形参为int的函数的指针
    
      return 0;
    
    }    
    

      typedef进阶:

    上面的代码中int *func1(int n)作为一个函数的返回值

    P_INT func3()
    {
      return func1;
    }
  • 相关阅读:
    Linux常用命令大全
    C# 多线程、控制线程数提高循环输出效率
    【Redis笔记(四)】 Redis数据结构
    Redis 详解 (一) StackExchange.Redis Client
    C#中的线程(一)入门
    C#多线程
    StackExchange.Redis帮助类解决方案RedisRepository封装(散列Hash类型数据操作)
    【转】C#中使用Redis学习二 在.NET4.5中使用redis hash操作
    使用MongoDB.NET 2.2.4驱动版本对 Mongodb3.3数据库中GridFS增删改查
    .Net-Mongodb学习大全网址
  • 原文地址:https://www.cnblogs.com/smh2015/p/7798546.html
Copyright © 2011-2022 走看看