1.数组指针2.函数指针3.函数指针数组4.指向函数指针数组的指针

1.理解数组指针
能够指向数组的指针称为数组指针
指针数组如图
在这里插入图片描述
数组指针如图
在这里插入图片描述
2.理解函数指针和定义
首先它是一个指针,它指向函数的地址.
在定义函数指针时必须指明函数指针所指向函数的返回值和参数列表。(括号不可少,类型要匹配)
3.理解函数指针数组和定义,转移表
首先它是一个数组,数组元素是函数的地址,即把函数的地址保存在数组中
int(pfun[2])(int,int)={Add,Sub};
函数指针的用途----转移表,通过转移表实现一个简单的计算器
4.理解指向函数指针数组的指针和定义
指向函数指针数组的指针,指针指向一个数组,数组的元素都是函数指针
int(
(*p)[2])(int,int)=&pfun;

char* test1(int a,int* b)
{
}
char* test1(int a,int* b)
{
}
int main()
{
  char* (*p1)(int,int*)=test1;`//函数指针
  char* (*p2[2])(int,int*)={test1,test2};//函数指针数组
  char*(*(*p3[2])(int,int*)=&p2; //指向函数指针数组的指针
}

5.了解回调函数的使用
回调函数就是一个通过函数指针调用的函数
C语言中的回调函数
回调函数主要结构有三部分组成:主函数、调用函数和被调函数。C语言中,被调函数通常以函数指针(指向对应函数的入口地址)的形式出现

//定义回调函数
void PrintfText() 
{
    printf("Hello World!\n");
}
//定义实现回调函数的"调用函数"
// 参数为函数指针,无参数返回void
void CallPrintfText(void (*callfuct)())
{
    callfuct();
}
//实现函数回调
int main(int argc,char* argv[])
{
    CallPrintfText(PrintfText);
    return 0;
}

6.练习使用qsort函数排序各种类型的数据

void qsort(void *base, size num,size_t width,int(*cmp)(const void *e1,const void *e2))
//base:要排序的数组
//num:数组中的元素数目
//size_t width:宽度
//cmp:比较两个数组元素的比较函数

7.模仿qsort的功能实现一个通用的冒泡排序

void bubble_t(int* arr,int sz)
{
    int i=0;
    for(i=0; i<sz-1; i++)
    {
       int j=0;
       for(j=0; j<sz-1-i; j++)
         { 
            if (arr[j]>arr[j+1])
            {
               int tmp=arr[j];
               arr[j]=arr[j+1];
               arr[j+1]=tmp;
             }
          }
     }
 }
void print_arr(int arr[],int sz)
{
    int i=0;
    for(i=0;i<sz;i++)
    {
        printf("%d ",arr[i]);
    }
    printf("\n");
 }
int main()
{
    int arr[]={9,8,7,6,5,4,3,2,1,0};
    int sz=sizeof(arr)/sizeof(arr[0]);
    bubble_sort(arr,sz);
    print_arr(arr,sz);
    return 0;
}
发布了60 篇原创文章 · 获赞 23 · 访问量 3335

猜你喜欢

转载自blog.csdn.net/weixin_44945537/article/details/94362812