zoukankan      html  css  js  c++  java
  • 指针理解

    对于指针的一些理解

    昨天看到这样的函数——image,我是比较蒙蔽的,为此我找寻大量的资料,才理解一点点。

    分析

    首先要理解函数指针的概念,函数指针的意思是通过声明一个指针达到操控函数的目的。
    一个函数名就是该函数的入口地址,所以我们把该函数名赋值给一个函数指针就可以调用该函数。下面用一个例子讲解。

    #include <stdio.h>
    #include <stdlib.h>
    /*声明一个函数指针,变量名为fun*/
    void (*fun)(int,int);
    
    void sum(int x, int y)
    {
        printf("%d
    ", x+y);
    }
    
    int
    main(void)
    {
    /*
      取sum函数的地址即&sum;
      也可以写成fun = sum ;
    */
        fun = &sum;
    /*取出sum函数的入口地址。*/
        (*fun)(2, 3);
        return 0;
    }
    

    以上就是函数指针的一个简单例子,现在我们分析下函数指针的类型。我查寻资料得知,一般来说,可以声明出一个表达式,就可以写出它的类型。只需要去掉变量名和“;”,就可以得到该表达式的类型。故上面代码中的函数指针的类型为

    void (*)(int, int)
    

    不知道你们看起来怪不怪,我看着十分别扭,不能接受,因为我在想那指针函数的类型岂不变成了

    void *()
    

    我最后想出一个我认为比较合理的理由,函数指针本质是一个指针,只是这种类型我以前不知道而已;而指针函数本质是一个函数,所以类型中包括有“()”的!!! ((doge))

    验证我的结论

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int  (*fun)(int);
    
    //int (*test)(int);
    
    int Print(int num)
    {
            int a;
            return num;
    }
    
    int
    main(void)
    {
            printf("%d
    ",sizeof(int *));
            printf("%p
    ",sizeof(int ));
            //
            printf("%p
    ",sizeof(void *()));//结果是0x1
            printf("%p
    ",sizeof( main));//结果是0x1
            printf("%d
    ",sizeof(int (*)()));
            printf("%d
    ",sizeof(int *[2]));
            printf("%d
    ",sizeof(int (*)[2]));
            printf("%d
    ",sizeof(int **));
            printf("%p
    ",Print);
            return 0;
    }
    

    根据网友解释,sizeof对一些无意义参数取值时,会得到0x1。

    最后顺便记录下typedef关键字

    以前只知道typedef只是用来起别名,没在意别名的位置可以在中间或者后面。

    • typedef int size_t;//size_t就是别名,在最后。
      size_t a 相当于 int a;
    • typedef int (fun)() ; //fun就是别名,在中间
      fun p 相当于 p 是一个int (
      p)();理论上我们可以通过 int (*)() p 声明,但是编译器无法识别。

    总的来说typedef起的别名就是变量名的位置


    本人第一次接触这种语法,还是很难接受!!!

  • 相关阅读:
    fafu 1231 dp(线段树优化dp)
    OUTLOOK+VBA 备份邮件到GMAIL
    心灵的程序:佛学与计算机
    建议增加编辑器插件“自动排版”
    高效演讲:简单四步走
    找呀找呀找地铁
    为什么你总是烦?
    变形金刚之雷曼疯狂兔子:抽水马桶变身
    客观:别人的主观
    用VBSCRIPT朗读文本
  • 原文地址:https://www.cnblogs.com/cwhan/p/14797152.html
Copyright © 2011-2022 走看看