C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组

 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 
25 //对于数组指针。
26 void func() {
27     int * py[5] ;   //定义一个数组指针
28     int aa[] = { 1,2,3,4,5,6 };
29        py[0] = aa;
30     for (int i = 0; i < sizeof(aa) / sizeof(int) ; i++)
31       printf("%d  " , py[0][i]);
32      puts("");
33 }
34 //对于指针数组
35 void  funcp() {
36 
37     int(*pt)[5] ;
38     int aa[] = { 1,2,3,4,5 };
39          pt= &aa;
40       for (int i = 0; i < 5; i++) {
41           printf("%d  ",(*pt)[i]);
42       }
43       puts("");
44 }
45 
46 int main( void ) {
47     system("echo  下面现实的是指针数组  ");
48     funcp();
49     system("echo  下面现实的是数组指针  ");
50     func();
51   //函数指针的用处
52     system("echo  下面现实的是函数指针  ");
53     void (*p)(int, int)= Add;
54     p(1,2);
55   //函数数组指针 ,这里需要区分指针数组和数组指针
56     /*
57      ...[]优先级高于*
58      数组指针 : (*p)[]  像函数指针一样,表示对于一个数组的指针,指针的类型是数组
59        int  a[10];
60        int (*p)[]=a; 
61      指针数组 : *p[]  ==*(p[])  数组里的每一个元素为都为指针  
62 
63     */
64     system("echo --下面现实的是函数指针数组----  ");
65     void(*ps[])(int, int) = { Add , Sub , Div ,Mul };
66     for (int i = 0; i < 4; i++) {
67              ps[i](1,2);
68     }
69     getchar();
70   return 0;
71 }

由上面那个列子:

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

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

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

   如图:

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

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

举个日常的列子:

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

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

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

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WeaponZhi

轻松初探Python(六)—函数

这是「AI 学习之路」的第 6 篇,「Python 学习」的第 6 篇 题外话 这周工作日 5 天,我并没有更新文章,但大家并不要以为小之懒惰了。正好相反,自从...

3697
来自专栏Python攻城狮

MySQL中char、varchar和text的区别

它们的存储方式和数据的检索方式都不一样。 数据的检索效率是:char > varchar > text 空间占用方面,就要具体情况具体分析了。

874
来自专栏陈满iOS

编程语言傻傻分不清:弱类型、强类型、动态类型、静态类型

这篇文章综合介绍了四种分类,特别地,为了方便大家快速有效的学习,笔者尝试用思维导图的办法描述编程语言的区别。一般来讲,看第一个图就够了。但如果你想更深入地了解,...

2621
来自专栏专注 Java 基础分享

漫谈计算机编码

我们知道,在计算机内部,所有的信息都是以二进制形式进行存储。无论是字符,或是视频音频文件,最终都会对应到一串由 0 和 1 构成的数字串。所以从我们能看懂的人类...

4036
来自专栏CaiRui

Mysql-7-mysql函数

1.数学函数   用来处理数值数据方面的运算,主要的数学函数有:绝对值函数,三角函数,对数函数,随机函数。使用数学函数过程中,如果有错误产生,该函数会返回nul...

2077
来自专栏卡少编程之旅

Javascript一些优雅实现

35711
来自专栏菜鸟计划

angularjs filter详解

过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果。 主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的...

3798
来自专栏移动端开发

内存管理说明白点

1512
来自专栏JMCui

读书笔记 之《Thinking in Java》(对象、集合、异常)

一、前言:     本来想看完书再整理下自己的笔记的,可是书才看了一半发现笔记有点多,有点乱,就先整理一份吧,顺便复习下前面的知识,之后的再补上。     真的...

3778
来自专栏SpringBoot

String、StringBuffer与StringBuilder之间区别

最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。

1022

扫码关注云+社区

领取腾讯云代金券