指针数组:一个数组,若其元素均为指针类型的数据,称为指针数组,指针数组存放的是指针类型的数据,也就是指针数组的每个元素都存放一个地址。下面定义一个指针数组:

int * p[4];//[]的优先级是比*高的,所以p先和[]结合,p[4]明显是一个数组,表示p数组有四个元素,int *表示每一个数组元素是指针类型的,可指向一个整型变量。

注意不用写成:int (*p)[4];  //这是指向一维数组的指针变量,数组的每个元素存放着一个指向整型一维数组的指针。

而数组指针,它指向的是一个数组。

#include<stdio.h>

int main()
{
int a=10;
int b=20;
int c=30;
int d=40;
int* p[4]={&a,&b,&c,&d};//存放四个整形数据的地址
for(int i=0;i<4;i++)
{
printf("%d\n",*(p[i]));//p[i]表示地址,前面取*就是取该地址中存放的值
} return 0;
}

输出结果:

10
20
30
40
上面的例子是一个简单的整型指针数组,下面这个例子是一个函数指针数组:

#include<stdio.h>

//定义函数

int GetMax(int a,int b)
{
printf("打印GetMax");
return a>b?a:b;
}
int GetMin(int a,int b)
{
printf("打印GetMin");
return a<b?a:b;
}
int GetAverage(int a,int b)
{
printf("打印GetAverage");
return (a+b)/2;
}
//回调函数
int DataHandler(int a,int b,int (*pfunc)(int a,int b))
{
int ret;
ret=(*pfunc)(a,b);//调用函数
return ret;
} int main()
{
//定义一个函数指针数组
int (*pfunc[3])(int,int)={GetMax,GetMin,GetAverage};
//调用函数
for(int i=0;i<3;i++)
{
int ret=(*pfunc[i])(40,50);
printf("%d\n",ret);
} return 0;
}

输出结果:

打印GetMax50
打印GetMin40
打印GetAverage45

说明:pfunc[i]表示的就是函数指针数组的函数的地址,取*表示该函数,注意:[]的优先级是大于*的。

嵌入式-C语言基础:指针数组(和数组指针区分开来)的更多相关文章

  1. 嵌入式-C语言基础:二维数组

    二维数组的每个元素都是一个一维数组,例如int arr[2][3]={{1,2,3},{4,5,6}}; 下面通过几个例子来对二维数组进行深入了解:二维数组可以看作是一个父数组,他的每个元素都是一个一 ...

  2. 嵌入式-C语言基础:通过结构体指针访问结构体数组

    #include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...

  3. 嵌入式-C语言基础:二维数组的地址写法

    二维数组a的有关指针: 表示形式                                含义                                                   ...

  4. 嵌入式-C语言基础:怎么样使得一个指针指向固定的区域?

    在学习单片机的时候,经常需要让一个指针指向固定的区域,这时候应该怎么操作? #include<stdio.h> int main() { int *p; int a =10; p=& ...

  5. 嵌入式-C语言基础:数组指针

    定义一个数组指针,指向二维数组: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int (*p)[4];//定义二维指针数组 p=a;//指向二维数组 ...

  6. 嵌入式-C语言基础:指针偏移打印数组

    在C语言中,数组名代表数组中首元素的地址,所以,下面两句获取数组的首地址是等价的: #include<stdio.h> int main() { int a[5]={1,2,3,4,5}; ...

  7. [Coursera][计算导论与C语言基础][Week 10]对于“数组应用练习”课后习题的思考题的一些想法

    (首先,关于Honor Code,我咨询过了Help Center,分享课后练习的思考题的想法是可以的(注意不是代码),但要标明引用,引用格式来源于https://guides.lib.monash. ...

  8. 嵌入式-C语言基础:二级指针

    二级指针:可以理解为指向指针的指针,存放的是指针变量的地址. 下面用一级指针来保存一个指针变量的地址: #include<stdio.h> int main() { int *p1; in ...

  9. 嵌入式-C语言基础:指针函数

    指针函数:返回指针的函数,即函数返回一个地址.例如:int * a(int x,int y);由于()的优先级比*高,因此a先与()结合,a(int x,int y)显然是一个函数,函数前面带一个in ...

随机推荐

  1. Neo4j入门详细教程

    Neo4j安装配置 (1)下载安装包 (2)安装jdk (3)环境变量配置 分三步,具体参考  https://www.bilibili.com/video/BV1Nz411q7bG?from=sea ...

  2. 手写tomcat——编写一个echo http服务器

    核心代码如下: public class DiyTomcat1 { public void run() throws IOException { ServerSocket serverSocket = ...

  3. 【读书笔记】C#高级编程 第二十章 诊断

    (一)诊断概述 名称空间System.Diagnostics提供了用于跟踪.事件日志.性能测量以及代码协定的类.System.Diagnostics.Contracts名称空间中的类可以定义前提条件. ...

  4. python中使用数组作为索引

    链接:https://blog.csdn.net/yzlh2009/article/details/114118470 情况一,索引数组为整数值 情况二,索引数组为bool值

  5. 【项目实战】pytorch实现逻辑斯蒂回归

    视频指导:https://www.bilibili.com/video/BV1Y7411d7Ys?p=6 一些数据集 在pytorch框架下,里面面有配套的数据集,pytorch里面有一个torchv ...

  6. 我眼中的大数据(三)——MapReduce

    ​ 这次来聊聊Hadoop中使用广泛的分布式计算方案--MapReduce.MapReduce是一种编程模型,还是一个分布式计算框架. MapReduce作为一种编程模型功能强大,使用简单.运算内容不 ...

  7. Idea插件SequenceDiagram快速查看方法调用

    Idea打开setting->plugins安装插件SequenceDiagram 快速查看方法调用 在方法名上右键点击SequenceDiagram即可生成方法调用图 最上面一行为该方法涉及的 ...

  8. MiniWord .NET Word模板引擎,藉由Word模板和数据简单、快速生成文件。

    Github / Gitee QQ群(1群) : 813100564 / QQ群(2群) : 579033769 介绍 MiniWord .NET Word模板引擎,藉由Word模板和数据简单.快速生 ...

  9. echarts中setOption没有重新渲染表格

    setOption是merge,而非赋值,所以第二次setOption后,实际是更新了option setOption支持notMerge为true的方案,但是需要全量更新option(性能不好): ...

  10. ToroiseGit/GitBash 设置提交信息模板设置

    一.背景:当使用git提交代码时,每次的提交信息固定,却又比较长不好记的时,还需要将模板的地址保存下来,如果能设置一个固定的模板就可以很好的解决这个问题. 提交前的提交信息需要手动输入: 二.Toro ...