1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<windows.h>
  4. /* 举列子说明什么是函数指针 */
  5.  
  6. //以一个加减乘除
  7.  
  8. void Add(int a, int b){
  9. printf("%d + %d = %d \n" , a , b , a+b);
  10. }
  11.  
  12. void Sub(int a , int b ) {
  13. printf("%d - %d = %d \n", a, b, a - b);
  14. }
  15.  
  16. void Mul(int a, int b) {
  17. printf("%d * %d = %d \n", a, b, a * b);
  18. }
  19. void Div(int a, int b) {
  20. printf("%d / %d = %d \n", a, b, a / b);
  21. }
  22.  
  23. //对于数组指针。
  24. void func() {
  25. int * py[] ; //定义一个数组指针
  26. int aa[] = { ,,,,, };
  27. py[] = aa;
  28. for (int i = ; i < sizeof(aa) / sizeof(int) ; i++)
  29. printf("%d " , py[][i]);
  30. puts("");
  31. }
  32. //对于指针数组
  33. void funcp() {
  34.  
  35. int(*pt)[] ;
  36. int aa[] = { ,,,, };
  37. pt= &aa;
  38. for (int i = ; i < ; i++) {
  39. printf("%d ",(*pt)[i]);
  40. }
  41. puts("");
  42. }
  43.  
  44. int main( void ) {
  45. system("echo 下面现实的是指针数组 ");
  46. funcp();
  47. system("echo 下面现实的是数组指针 ");
  48. func();
  49. //函数指针的用处
  50. system("echo 下面现实的是函数指针 ");
  51. void (*p)(int, int)= Add;
  52. p(,);
  53. //函数数组指针 ,这里需要区分指针数组和数组指针
  54. /*
  55. ...[]优先级高于*
  56. 数组指针 : (*p)[] 像函数指针一样,表示对于一个数组的指针,指针的类型是数组
  57. int a[10];
  58. int (*p)[]=a;
  59. 指针数组 : *p[] ==*(p[]) 数组里的每一个元素为都为指针
  60.  
  61. */
  62. system("echo --下面现实的是函数指针数组---- ");
  63. void(*ps[])(int, int) = { Add , Sub , Div ,Mul };
  64. for (int i = ; i < ; i++) {
  65. ps[i](,);
  66. }
  67. getchar();
  68. return ;
  69. }

由上面那个列子:

我们就可以大概知道这些:

指针  ---》指向的是一个地址、

数组指针:  形如  int *p[4]  -->说的是  p[0]~p[3]均为指针:

如图:

对于指针数组:  形如: int (*p)[5] ;

这 *p是一个指针,但是不是一个 普通的一级指针,有点像二级指针,但是没有二级指针那么大的权限,这样比喻吧:

举个日常的列子:

早上我们都要吃早饭(你丫,要是硬要说你不吃,那就不吃好了! ),但是至于要吃什么--随便,但是规定你,只能吃五碗。指针数组就是这样,你可以指向任何东西,但是都有限制(元素有限制)。

函数指针: 顾名思义是指向函数的指针, 形如:  void (*p) (int a ) ;  这个指针的指向范围就更加的小了,就是只能指向函数。就好比,你早上要么不吃早饭,要吃,就得给老子吃胡萝卜啥的一样一样的。

至于函数指针数组,函数数组指针,其实搞懂了,前面的几种含义,后面的这些指针的意思,大概都可以有清晰的认识。

const int *p ;   ----指针常量,其所指向的对象,只能有读取的权限,并没有写入的权限。

int * const p ; -----常量指针,其地址不能改变。但是改地址的值可读可写。

-----------------以上都是依据自己编程经验的理解,以及平时使用的理解来写的。如果有误,还请指点。--------------------------

C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组的更多相关文章

  1. opengl笔记——旋转,一段代码的理解

    重看:opengl笔记——OpenGL好资料备忘 在找到这段代码,对理解opengl旋转很有帮助 ... glPushMatrix(); // initialze ModelView matrix g ...

  2. 【转】 BSS段 数据段 代码段 堆栈 指针 vs 引用

    原文:http://blog.csdn.net/godspirits/article/details/2953721 BSS段 数据段 代码段 堆栈 (转+) 声明:大部分来自于维基百科,自由的百科全 ...

  3. JavaScript-navigator_userAgent-编写一段代码能够区分浏览器的主流和区分

    1 userAgent:包含浏览器名称和版本号的字符串 <!DOCTYPE html> <html> <head lang="en"> < ...

  4. 给指针malloc分配空间后就等于数组吗?

    首先回答这个的问题:严格的说不等于数组,但是可以认为它是个数组一样的使用而不产生任何问题.不过既然这样,那它应该算是个数组吧.所以,一般我们都用“动态数组”这种名字来称呼这种东西. 要讲清楚这个东西, ...

  5. 给指针malloc分配空间后就等于数组吗?【转】

    首先回答你的问题:严格的说不等于数组,但是可以认为它是个数组一样的使用而不产生任何问题. 不过既然这样,那它应该算是个数组吧.所以,一般我们都用“动态数组”这种名字来称呼这种东西. 要讲清楚这个东西, ...

  6. 一段代码的疑问(1)——unsigned与signed

    现象: 先来看一段代码: 这段代码的输出结果是: -84 4294967264 分析: xiaoqiang@dev:~/cpp$ g++ -g c212.cc -o temp xiaoqiang@de ...

  7. 一段代码看 Java 引用类型

    Java 中的操作数(不知道叫什么,相对于 bytecode 而言,类似 CPU 的操作码和操作数)分为值类型和引用类型: 值类型就是直接存储最终数值的,如 char, int, float, dou ...

  8. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

  9. 《C和指针》 读书笔记 -- 第8章 数组

    1.在C中,数组名的值是一个指针常量而不是指针变量,也就是数组第一个元素的地址. 2.数组和指针的区别: 声明一个数组时,编译器将根据声明所指定的元素数量为数组保留内存空间,然后再创建数组名,它的值是 ...

随机推荐

  1. matplotlib

    前导: 安装 numpy http://sourceforge.net/projects/numpy/files/ http://sourceforge.net/projects/numpy/file ...

  2. [SAP ABAP开发技术总结]字符串处理函数、正则表达式

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. hdu 栈题1022&1702

    http://acm.hdu.edu.cn/showproblem.php?pid=1022 http://blog.csdn.net/swm8023/article/details/6902426此 ...

  4. C#中实现多继承的方法

    有一个类叫老虎,还有一个类叫苍蝇.现在新创一个超级老虎类,一种可以飞的老虎,超级老虎由于同时也继承自苍蝇 namespace Interface { //飞的接口 public interface I ...

  5. LTE Module User Documentation(翻译4)—— 使用 Fading Trace

    LTE用户文档 (如有不当的地方,欢迎指正!) 7 使用 Fading Trace   本节描述如何在 LTE 仿真中使用 fading traces .   (1)生成 Fading Traces  ...

  6. Java Abstract class and Interface

    Abstract Class 在定义class的时候必须有abstract 关键字 抽象方法必须有abstract关键字. 可以有已经实现的方法. 可以定义static final 的常量. 可以实现 ...

  7. iOS 设置button中图文位置

    方法一. -(CGRect)imageRectForContentRect:(CGRect)contentRect {    return CGRectMake(self.width - kImage ...

  8. 【转】分析Linux和windows动态库

    原文地址:http://www.cnblogs.com/chio/archive/2008/11/13/1333119.html 摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Lin ...

  9. poj3304Segments(直线与多条线段相交)

    链接 枚举两点(端点),循环遍历与直线相交的线段. #include <iostream> #include<cstdio> #include<cstring> # ...

  10. (五)Super VLAN