zoukankan      html  css  js  c++  java
  • 有趣的指针转换实验

    1.

    #include <stdio.h>

    void Function()
    {
        printf("Call Function! ");
    }

    int main()
    {
        void (*p)();
        printf("p=%p &p=%p ", p,&p);           //p是一级指针,&p是二级指针
    //  printf("(int *)&p=%p (int **) ", (int *)&p);
    //  *(int *)&p = (int)Function;
    //  (*p)();

        return 0;
    }

    打印结果:p=0x8048499 &p=0xbf87b71c

    2.

    #include <stdio.h>

    void Function()
    {
        printf("Call Function! ");
    }

    int main()
    {
        void (*p)();
        printf("p=%p &p=%p ", p,&p);           //p是一级指针,&p是二级指针

        printf("(int *)&p=%p (int **)&p=%p ", (int *)&p, (int **)&p);

        //第一个强转成int类型的一级指针, 第二个强转成int类型的二级指针, 所以地址值还是函数指针p的二级指针值

        //此时的两个变量p的值虽然相同,但是指针类型已经不同,一个属于一级指针,另一个属于二级指针,可做如下实验验证:

          int a=5;

          (int *)&p;   // (int **)&p;

          p = &a;

    //  *(int *)&p = (int)Function;  思考:为什么*&p = Function 与 *(int *)&p = Function 结果一样
    //  (*p)();

        return 0;
    }

    打印结果:        p=0x80484a9             &p=0xbf9ecc3c
               (int *)&p=0xbf9ecc3c   (int **)&p=0xbf9ecc3c

     

    3.

    #include <stdio.h>

    void Function()
    {
        printf("Call Function! ");
    }

    int main()
    {
        void (*p)();
        printf("p=%p &p=%p ", p,&p);           //p是一级指针,&p是二级指针

        //第一个强转成int类型的一级指针, 第二个强转成int类型的二级指针, 所以地址值还是函数指针p的二级指针值
        printf("(int *)&p=%p (int **)&p=%p ", (int *)&p, (int **)&p);

       //该表达式解释为,将&p"二级指针"强转为int类型的一级指针"(int *)&p",但是还是二级指针值。

      //接着对该一级指针取内容变为int的类型整数表达式"*(int *)&p",并把(int)Function赋值给*p

      //注:此时的p已经是int类型的一级指针了
        *(int *)&p = (int)Function;
    //  (*p)();

        return 0;
    }

    打印结果:        p=0x95d6d0          &p=0xbfb91330
    (int *)&p=0xbfb91330        (int **)&p=0xbfb91330
    Call Function!

  • 相关阅读:
    Oracle通过Rman的"copy datafile"转移数据文件后不要使用sqlplus来重命名文件位置和文件名
    Oracle使用errorstack跟踪客户端的ORA报错
    Oracle OEM 13C表空间报警延迟问题
    CH5 用神经网络解决线性问题
    CH4 简化神经网络模型
    CH3 初识 TensorFlow
    Python 语言和 TensorFlow 框架环境准备
    创建型模式之单例模式与工厂模式(一)
    Node.js Koa框架学习笔记
    国庆七天假 不如来学学Vue-Router
  • 原文地址:https://www.cnblogs.com/kaijia9/p/3352059.html
Copyright © 2011-2022 走看看