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

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. Springboot重定向,没有位置没有加“/user”,但是url在请求位置的前面“/user”就出现了

    是因为":"后面没有加"/" 原先的 return "redirect:main.html"; 正确的 return "redir ...

  2. 如何通过C#/VB.NET设置Word文档段落缩进

    缩进是指调整文本与页面边界之间的距离.在水平标尺,有四个段落缩进滑块:首行缩进.悬挂缩进.左缩进以及右缩进.在对于word文档的录入时,常常需要注意录入的格式,通过合理地设置段落格式,可以让文稿看起来 ...

  3. Javaweb—登录案例

    案例:用户登录 用户登录案例需求: 编写login.html登录页面 username & password 两个输入框 使用Druid数据库连接池技术,操作mysql,day14数据库中us ...

  4. 第六十八篇:vue-cli新建项目

    好家伙,之前只是一股脑得用,连里面的可选配置项都不清楚,今天来把它搞清楚 1.单页面应用 1.1.什么是单页面应用程序 单页面应用程序(英文名: Single Page Application)简称S ...

  5. re.sub()用法

    原文链接:https://blog.csdn.net/jackandsnow/article/details/103885422

  6. ORM增删改查并发性能测试2

    前言 上一篇<ORM增删改查并发性能测试>出现了点小失误,有的输出SQL日志的代码没有禁用,数据库连接字符串可能有问题.统一环境,统一代码后,重新写一篇. 这次重点是并发性能测试,真不是为 ...

  7. Openstack neutron:云数据中心底层网络架构

    目录 - 目录 - 云数据中心流量类型 - NSX整体网络结构 - 管理网络(API网络) - 租户网络 - 外联网络 - 存储网络 - openstack整体网络结构 - 管理网络:(上图中蓝线) ...

  8. KVM里安装不是原装的winxp系统镜像

    从网上下载的winxp系统镜像,虽然是iso格式的,但是里面的内容是如下情况的 因此安装的话,需要采取如下步骤 1.添加一个光驱引导,挂载一个iso格式的pe 2.再添加一个光驱,挂载iso格式的wi ...

  9. Redis可视化工具(支持ssh链接)

    1.Redis Desktop Manager RedisDesktopManager,简称RDM,这是一款很出名的Redis可视化管理工具,支持Windows,Mac,Ipad,LInux 开源地址 ...

  10. Logstash:使用 Logstash 导入 CSV 文件示例

    转载自:https://elasticstack.blog.csdn.net/article/details/114374804 在今天的文章中,我将展示如何使用 file input 结合 mult ...