zoukankan      html  css  js  c++  java
  • 汇编的角度分析C语言的指针-02

    1.关于地址符&:&是地址符,类型是其后面的类型加一个“*”,任何变量都可以使用&来获取地址,但不能用在常量上。

    char a = 10;    
    short b = 20;    
    int c = 30;    
    
    //&a   &b   &c的类型
    //&a 是char* 类型       &b是short*类型     &c是int*类型

     

    2、关于变量类型的反汇编

    char a = 10;        
    short b = 20;        
    int c = 30;        
            
    char* pa = &a;        
    short* pb = &b;        
    int* pc = &c;        
            
    //&pa 是什么类型?  &pa是char**  类型的       
    //&pb 是什么类型?  &pb是short** 类型的     
    //&pc 是什么类型?  &pc是int**   类型的  
    int* px;        
            
    int** px2;        
            
    int*** px3;        
            
    int**** px4;        
            
    //*(px) 是什么类型?    int类型的    
            
    //*(px2) 是什么类型?   int*类型的    
            
    //*(px3) 是什么类型?   int** 类型的  
            
    //*(px4) 是什么类型?   int*** 类型的    
    char a = 10;        
    short b = 20;        
    int c = 30;        
            
    char* pa = (char*)&a;        
    short* pb = (short*)&b;        
    int* pc = (int*)&c;        
            
    简写为:        
    char* pa = &a;        
    short* pb = &b;        
    int* pc = &c;        

    观察分析如下代码的反汇编:

    char a = 10;            
    short b = 20;            
    int c = 30;            
                
    char* pa = &a;            
    short* pb = &b;            
    int* pc = &c;            
                
    char** ppa = (char**)&pa;            
    short** ppb = (short**)&pb;            
    int** ppc = (int**)&pc;            
                
    简写为:            
    char** ppa = &pa;            
    short** ppb = &pb;            
    int** ppc = &pc;            

    反汇编:

       总结: 带“*”号的宽度都是四个字节,存放的是地址去掉一个“*”的变量的地址

    3、观察如下代码的反汇编

    int x,y;    
    int* px;    
    int** px2;    
    int*** px3;    
        
    x = 10;    
    px = &x;    
    px2 = &px;    
    px3 = &px2;    
        
    y = *(*(*(px3)));    
        

    反汇编:

     总结:

      1、带“*”类型的变量,可以通过在其变量前加*来获取其指向内存中的存储值

      2、带“*”类型的变量前面加上*,类型是原来的类型减去一个*

  • 相关阅读:
    UML类图的关系
    软工视频总结
    面向对象——(1)概述
    软件工程——整体把握
    白盒测试中的逻辑覆盖
    机房收费调试问题(二)
    机房收费调试问题(一)
    如何将ER图转换成关系模式集
    机房收费之感想与收获
    【linux】U盘安装启动出现press the enter key to begin the installation process 就不动弹了
  • 原文地址:https://www.cnblogs.com/heyhx/p/14229071.html
Copyright © 2011-2022 走看看