专栏首页mlC/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组

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 条评论
登录 后参与评论

相关文章

  • HDU-----(1083)Courses(最大匹配)

    Courses Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

    Gxjun
  • poj----2155 Matrix(二维树状数组第二类)

    Matrix Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 16950 ...

    Gxjun
  • hdu----(5045)Contest(数位dp)

    Contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (J...

    Gxjun
  • LeetCode 1348. Tweet Counts Per Frequency

    ShenduCC
  • leetcode501. Find Mode in Binary Search Tree

    Given a binary search tree (BST) with duplicates, find all the mode(s) (the most...

    眯眯眼的猫头鹰
  • 关于WCF服务在高并发情况下报目标积极拒绝的异常处理

    最近弄了个wcf的监控服务,偶尔监控到目标服务会报一个目标积极拒绝的错误。一开始以为服务停止了,上服务器检查目标服务好好的活着。于是开始查原因。 一般来说目标积...

    kklldog
  • ACS Distributed System故障解决

    System Administration > Operations > Local Operations > Deployment Operations...

    刘銮奕
  • void指针进阶用法

    [导读] 要比较灵活的使用C语言实现一些高层级的框架时,需要掌握一些进阶编程技巧,这篇来谈谈void指针的一些妙用。测试环境采用 IAR for ARM 8.4...

    逸珺
  • SaaS初创公司如何配比工程师和销售人员?

    作者:杨丽、张苏月 关键词:SaaS,研发,销售,CSM,SDR,AE,Marketing, Upsell 网址:www.tikehui.com 在有限的预算...

    人称T客
  • 3分钟短文 | Laravel 日志全程记录 SQL 查询语句,要改写底层?

    Laravel 提供给了比较强大的ORM数据库操作方式,如果在数据库端考虑到性能问题, 难以打开MySQL的慢日志,或者出于审计考虑,要在系统内全程跟踪所有的S...

    程序员小助手

扫码关注云+社区

领取腾讯云代金券