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;
}
原文地址:https://www.cnblogs.com/smh2015/p/7798546.html