• c语言学习之基础知识点介绍(十):内存空间模型、地址解释及指针变量


    一、内存

    /*
     
     内存:
              存在内存里的。
     
     内存分了N多个小空间,每个小空间1个字节
     
     每个小空间有它自己的地址。每个地址之间差1
     
     int类型占用4个字节,等于占了4个空间(有4个地址),不需要记住4个地址,而记住首地址就行了(因为首地址相当于入口或者生活中的门)
     
     指针:
     
        指针就是地址,地址就是指针。
     
        地址:内存的地址
     
     
     内存中的地址:
            其实也是从1开始编号,然后一直自增
            1M内存,1024个地址
     
     0x7fff5fbff7cc:这叫16进制
     
     十进制:逢10进1        有:0  1  2  3  4  5  6  7  8  9
                           逢十进1
                                    9   10
     
     十六进制:就是逢16进1
     
                          有:0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
     
     以0x开头  
            简单说1-10
                    0x1   0x2  0x3  0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf
                16:0x10
    
     0x35:53
     
     0xa0:160
     
     顺带说下:
        二进制:0和1
                0   1  10
    
        八进制:0 1 2 3 4 5 6 7 
               
    */

     二、指针变量

    /*
    指针变量:存放地址的变量。
            语法:类型  *指针变量名;
            赋值:指针变量名  = 地址;     
    在声明的时候初始化:类型  *指针变量名 = 地址;       
    例如:
    int num = 20;
    int *nump = #//存的是num的地址
    打印指针变量:
             printf("%p 
     %p 
    ",nump,&num);
    注意:定义指针变量,有如下几种方式:
                1、类型  *  变量名 ;
                2、类型*  变量名 ;
                3、类型  *变量名 ;
    以上三种都可以,*  代表一个特殊类型。
    类型*  构成了类型
    */

    上面介绍了怎么去定义一个指针变量,下面介绍怎么使用它。

    /*
     
     使用指针变量
     
            语法:
                    *指针变量名;
     
            语义:这就可以访问你所指向的那块空间里的值了
     
     
     千万要注意:
        访问指针变量时加星号和不加星号的区别:
                int num;
                int *p = #
     
                1.加星号代表,是访问它所指向的空间里面的值。*p 相当于  num;
     
                2.不加星号代表,是访问它自己的空间里面的值。p 就是自己里面存的值
    
    */
    //例如:
    
        int num = 10;
        
        int *pNum;
        
        pNum = # //注意:&不要省略!
        
        printf("%d   %d
    ",num,*pNum);//所以也就是说,*pNum == num;
    
        *pNum = 30;
        
        printf("num=%d
    ",num);//30
    
    
        
        num =  90;
        
        printf("*pNum=%d
    ",*pNum);
        
        int num = 10;
        
        int *pNum = #
        
        (*pNum)++;  //相当于num++ num=11
        
        num += 20;
        
        printf("num=%d
    ",num);//31
    
    
        
        int num = 10;
        
        int *pNum = #
        
        int *pNum2 = pNum;
        
        *pNum2 = 30;
        
        printf("num=%d  *pNum=%d     
    
        *pNum2=%d
    ",num,*pNum,*pNum2);//30 30 30
        

    一定要注意在使用指针变量的时候,加星号(*)和不加星号(*)的区别;同时指针变量也区别类型(区分类型是为了告诉指针,该去读取几个字节)。

    什么类型的变量就用什么类型的指针去读取。

    下面看一个例子:

    int num1 = 10,num2 = 20;
    int *p1 = &num1;
    int *p2 = &num2;
    int *p3 =  p2;
    *p2 = 40 ;
    p2 = p1;
    *p2 = 30;
    
    printf("num1 = %d   num2 = %d   *p1= %d   *p2= %d   *p3= %d ",num1,num2.*p1,*p2,*p3);
    /*
    有兴趣的可以自己算下。
    */

     指针变量作为函数的参数:

    /*
    语法:
    返回值类型 函数名(指针类型*  指针变量名){
         
    }
    
    例如:
    void test1(int*  num){
        
    }
    
    int main(int argc,const char argv[]){
         int num = 10;
         test1(&num);
    }
    */
  • 相关阅读:
    如何对ArcSDE空间网格大小进行优化?
    关于ArcGis的拓扑分析
    开发人员一定要加入收藏夹的网站
    c#+ArcEngine93实现实时显示测距结果功能
    获得ArcEngine图标和arcengine的汉化方法
    深入理解游标Cursors,实现数据的快速查找,插入,删除,更新
    如何调用ITopologicalOperator.Union方法成功地merge polygon
    地图分幅算法实现
    ArcSDE工作机制
    arcengine 空间查询SpatialRelDescription使用
  • 原文地址:https://www.cnblogs.com/bobo-pcb/p/4919833.html
Copyright © 2020-2023  润新知