zoukankan      html  css  js  c++  java
  • 数组与指针分析

    数组的本质

    • 数组是一段连续的内存空间
    • 数组的空间大小为sizeof(array_type)*array_size
    • 数组名可以看做指向第一个元素的常量指针

    指针的运算

    指针是一种特殊的变量,与整数的运算规则为
    p+n; <--> (unsigned int)p + n * sizeof(*p);
    结论
    当指针p指向一个同类型的数组的元素时,p+1将指向当前元素的下一个元素;p-1将指向当前元素的上一个元素。

    指针之间只支持减法运算,参与减法运算的指针类型必须相同,
    注意

    • 只有当两个指针指向同一个数组中的元素时,指针相减才有意义,其意义为指针所指元素的下标差
    • 当两个指针指向的元素不在同一个数组中时,结果未定义

    例子1:指针运算的应用

    #include <stdio.h>  
      
    #define DIM(a) (sizeof(a) / sizeof(*a))  
      
    int main()  
    {  
        char s[] = {'H', 'e', 'l', 'l', 'o'};  
        char* pBegin = s;  
        char* pEnd = s + DIM(s); // Key point  
        char* p = NULL;  
          
        printf("pBegin = %p
    ", pBegin);  
        printf("pEnd = %p
    ", pEnd);  
          
        printf("Size: %d
    ", pEnd - pBegin);  
          
        for(p=pBegin; p<pEnd; p++)  
        {  
            printf("%c", *p);  
        }  
          
        printf("
    ");  
         
        return 0;  
    }  
    

    指针的比较

    • 指针也可以进行关系比较(<,>,<=,>=)
    • 指针关系运算的前提是同时指向同一个数组中的元素
    • 任意两个指针之间的比较运算(==,=!)无限制
    • 参与比较运算的指针类型必须相同

    小结

    • 数组声明时编译器自动分配一片连续的内存空间
    • 指针声明时只分配了用于容纳地址值的4字节空间
    • 指针和整数可以进行运算,结果为指针
    • 指针之间支持减法运算,其结果为数组元素下标差
    • 指针之间支持比较运算,其类型必须相同
  • 相关阅读:
    python hashlib模块
    OS模块-提供对操作系统进行调用的接口
    For循环
    python --time()函数
    使用docker部署prometheus和grafana 并监控mysql 配置告警
    记换换回收一个js逆向分析
    mitmproxy 在windows上的使用
    elasticsearch_dsl 的nested
    利用谷歌插件破解今日头条的新闻ajax参数加密,新手都能懂
    aiohttp爬虫的模板,类的形式
  • 原文地址:https://www.cnblogs.com/yanyun888/p/9213166.html
Copyright © 2011-2022 走看看