指针函数、数组指针、函数指针、函数指针数组和指向函数指针数组的指针

标签: 函数 指针 应用
217人阅读 评论(0) 收藏 举报
分类:

指针数组

  • 是个数组,是一个可以存放指针的数组

int * a[10] 是一个整型数组。

char** a[10]是一个二级指针数组。

数组指针

  • 是一个指针

  • int(*p)[10],int(*p)表示是一个指针变量,[10]则表示指向一个数组

可以通过数组指针找到数组里面的内容,主要应用于二级指针的访问

数组指针的赋值:
int (*parr)[10] = &arr;
等价于
* ( * ( parr + 0)+ x)

  • 二维指针访问示例:
for(i=0; i<10; i++)
{
    for(j=0; j<10; j++)
    {
        printf("%d", *(*(p+i)+j));
    }
}

函数指针

  • 是个指针

    “函数指针”本身首先应是指针变量,只不过该指针变量指向函数。

    这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数 。

    如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。

    函数指针有两个用途:调用函数和做函数的参数。

函数指针数组

  • 即将函数的地址存在一块联系的地址中

    函数指针的一个用法出现在菜单驱动系统中。例如程序可以提示用户输入一个整数值来选择菜单中的一个选项。用户的选择可以做函数指针数组的下标,而数组中的指针可以用来调用函数。

int main()
{
    int(*p1)(int, int) = Add;//函数指针数组的内容函数
    int(*p2)(int, int) = Sub;

    int(*pFunArr[4])(int, int);//函数指针数组
}

指向函数指针数组的指针

  • 示例
void(*signal(int, void(*)int))(int);//函数的声明

void(*signal(int a, void(*pFun)(int)))(int)//函数的定义
{
    return NULL;
}


  • signal是一个函数的声明,函数的第一个参数类型是int,第二个参数类型是一个函数指针,这个指针能够指向参数为int,返回类型为void的函数。signal函数的返回类型也是一个函数指针,该指针能够指向函数类型为int,返回值类型为void的函数。

回调函数

  • 通过函数指针调用函数

  • 主要应用:计算器的应用;
         qsort函数
         

    • qsort函数的使用
#include<stdio.h>
#include<stdlib.h>
int cmp(const void*n1, const void*n2)
{
    return *(int*)n1-*(int*)n2;
}

int main()
{
    int arr[] = {6,5,4,3,2,1};
    int sz = sizeof(arr);
    int sz_1 = sizeof(arr[0]);
    int n = sizeof(arr)/sizeof(arr[0]);
    int i = 0;


    qsort(arr, n, sz_1, cmp);

    for(i=0; i<n; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
 } 
查看评论

函数指针和函数指针数组及其应用

1. 函数指针 先来看一个简单的例子。 int a=3; void *p=&a; 这是一个基础的不能再基础的例子。相信学过指针的都能看得懂。P是一个指针,指向a。a 是一个整形变量。 函数指针和其类似...
  • yuexiang321
  • yuexiang321
  • 2016-09-25 11:07:42
  • 5175

C语言--函数指针与函数指针数组

#include //函数指针 int fun(void) { printf("Hello World\n"); return 0; } int main(int argc, const c...
  • u011266694
  • u011266694
  • 2016-10-30 19:30:43
  • 1694

C/C++——指向函数的指针和指向函数的指针的数组

指向函数的指针 指向函数的指针的数组
  • Linux_ever
  • Linux_ever
  • 2016-03-15 22:06:03
  • 1345

C/C++函数指针和函数指针数组用法

#include "iostream" using namespace std; void fun2(){ cout
  • HES_C
  • HES_C
  • 2017-04-01 20:10:55
  • 509

拒绝switch,程序加速之函数指针数组

先看一个使用switch语句的程序: #include #include //加法 int add(int a,int b) { return a+b; } //减法 int subtra...
  • woshiwanghao_hi
  • woshiwanghao_hi
  • 2015-04-02 13:11:33
  • 1382

指针数组,数组指针,函数指针,函数指针数组,函数指针数组的指针

什么是指针? 什么是指针数组?什么是数组指针?什么是函数指针?什么是函数指针数组?什么是函数指针数组的指针........
  • Yinghuhu333333
  • Yinghuhu333333
  • 2017-11-24 19:08:58
  • 62

【C语言】理解指针数组 数组指针 函数指针

首先我们来看一下指针与数组的区别: 指针数组与数组指针 指针数组:储存指针的数组 首先它是一个数组,数组的元素都是指针,数组占多少字节由数组本身决定。 例如: i...
  • Rae8023
  • Rae8023
  • 2017-02-15 09:53:17
  • 470

基于函数指针数组的有限状态机

第八章  8.7 有限状态机,这个东西很有用,我准备编写的电控程序就要这么干,用if和switch太不给力了 哈哈 finite state machine   基于函数指针数组 声明: ...
  • le062
  • le062
  • 2012-07-19 11:26:00
  • 1156

函数指针、函数名、二维数组指针做形参

  • 2013年10月16日 11:25
  • 102KB
  • 下载

指针数组、数组指针、函数指针、指针函数总结

指针数组 && 数组指针 char *a[5]; //定义一个指针数组, 数组的元素都是char *指针类型。初始化也可以在里面存放字符或字符串。a的类型是char *[5] //若cha...
  • codebat
  • codebat
  • 2014-11-10 18:28:14
  • 813
    个人资料
    持之以恒
    等级:
    访问量: 4567
    积分: 287
    排名: 27万+