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

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

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

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

  1. #include<stdio.h>
  2.  
  3. int main()
  4. {
  5. int a=10;
  6. int b=20;
  7. int c=30;
  8. int d=40;
  9. int* p[4]={&a,&b,&c,&d};//存放四个整形数据的地址
  10. for(int i=0;i<4;i++)
  11. {
  12. printf("%d\n",*(p[i]));//p[i]表示地址,前面取*就是取该地址中存放的值
  13. }
  14.  
  15. return 0;
  16. }

输出结果:

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

  1. #include<stdio.h>
  2.  
  3. //定义函数
  4.  
  5. int GetMax(int a,int b)
  6. {
  7. printf("打印GetMax");
  8. return a>b?a:b;
  9. }
  10. int GetMin(int a,int b)
  11. {
  12. printf("打印GetMin");
  13. return a<b?a:b;
  14. }
  15. int GetAverage(int a,int b)
  16. {
  17. printf("打印GetAverage");
  18. return (a+b)/2;
  19. }
  20. //回调函数
  21. int DataHandler(int a,int b,int (*pfunc)(int a,int b))
  22. {
  23. int ret;
  24. ret=(*pfunc)(a,b);//调用函数
  25. return ret;
  26. }
  27.  
  28. int main()
  29. {
  30. //定义一个函数指针数组
  31. int (*pfunc[3])(int,int)={GetMax,GetMin,GetAverage};
  32. //调用函数
  33. for(int i=0;i<3;i++)
  34. {
  35. int ret=(*pfunc[i])(40,50);
  36. printf("%d\n",ret);
  37. }
  38.  
  39. return 0;
  40. }

输出结果:

打印GetMax50
打印GetMin40
打印GetAverage45

  1. 说明: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. 简易的AutoPlayCarousel 轮播控件

    原理是使用StackPanel 的margin属性的偏移来实现轮播的效果 废话不多说直接上代码 AutoPlayCarousel核心代码 [ContentProperty(nameof(Childre ...

  2. 第九十三篇:ESLint:可组装的javaScript和JSX检查工具

    好家伙, 1.什么是ESLint? 代码检查工具,用来检查你的代码是否符合指定的规范 2.ESLint有什么用? 统一JavaScript代码风格的工具 在合作开发的时候, 每个成员的代码风格都有可能 ...

  3. python 二分法查找字典中指定项第一次出现的索引

    import time #引入time库,后续计算时间. inform_m = {} #创建母字典 inform_s = {} #母字典下嵌套的子字典 #给母字典添加键-值 for i in rang ...

  4. 使用Dockfile构建mysql镜像与初始化运行mysql容器

    使用docker 构建mysql镜像,并在容器初次创建时初始化数据 Dockerfile FROM mysql:5.7.23 MAINTAINER gradyjiang "jiangzhon ...

  5. Scanner中nextInt()和nextline()读取字符串的问题

    Scanner中nextInt()和nextline()读取字符串的问题 import java.util.Scanner; public class Main { public static voi ...

  6. Go编译过程

    一. Go编译流程 二.过程说明 1. 词法解析 读取Go源文件,将字符序列转换为符号(token)序列,比如将":="转换为_Define 代码中的标识符.关键字.运算符和分隔符 ...

  7. 使用 APM 中的 Service Map 了解和调试应用程序

    文章转载自:https://blog.csdn.net/UbuntuTouch/article/details/118667839

  8. Kibana控制台(Dev Tools) Console

    控制台插件提供一个用户界面来和 Elasticsearch 的 REST API 交互.控制台有两个主要部分: editor ,用来编写提交给 Elasticsearch 的请求: response ...

  9. frps服务端与nginx可共用443端口

    转载自: https://www.ioiox.com/archives/78.html frps服务器上的nginx frps.ini配置 由于nginx占用80/443端口,frps.ini中的 v ...

  10. jumpserver 2222端口的使用

    可以这样理解: 通过在jumpserver的web界面添加的用户,相应的也有权限通过远程使用命令的方式登陆jumpserver,进行相应的管理,只不过使用的端口是2222端口,不是常见的22端口. 一 ...