当前位置: 首页 > news >正文

C语言学习笔记day18

1. 指针基本概念

    1.地址:用来区分内存中不同字节的编号
    2.指针:地址就是指针,指针就是地址
    3.指针变量:存储指针的变量,有时去掉变量,称为指针

2. 指针运算符

    1.&:
        1.获得一个变量在内存空间中的首地址
        2.让表达式类型升级 
    2.*:
        1.取指针指向空间中的值(所取空间大小取决于指针类型)
        2.将等号右边的值放入指针指向的空间
        3.让表达式类型降级 
        
    二级指针在C语言中2个地方使用:
        1.函数体内部想修改函数体外部指针变量值的时候,传指针变量的地址也就是二级指针
        2.指针数组传参时,数组的数组名是指向数组第一个指针元素的指针,也就是二级指针

3. 指针的算数运算

    +    指针偏移量为指向的数据类型大小个字节空间
    -    
    ++
    --    
        int *:                4
        char *:             1
        double *:            8
        struct student*:    44
        int **:                8

4. void指针

    void a;
    void *p;
    
    void指针常用来存储内存地址
    1.void类型指针不要使用* ++ --相关操作
    
    void *型指针和其余类型指针的转换
    void * -> char *        不需要做强制类型转换
              double *
              int * 
    char *   -> void *      需要类型转换(舍弃精度)
    double *
    int *
    
    主要用在作为函数参数,或者函数返回值表示兼容所有类型指针

    将内存地址为0x2000的空间赋值一个整形100 
    (*(int *)((void *)0x2000)) = 100;

5. const指针

    1.const int *p;
    2.int const *p;
    3.int *const p;
    4.const int *const p;
    5.int const *const p;
    
    1和2是等价的
    p可以改变,*p不可以改变
    p可以指向任意空间,但无法利用p修改指针空间的值
    
    3
    p不能改变,*p可以改变
    p只能指向初始化时的空间,无法指向其余空间,但可以利用指针修改指向空间的值
    注意:必须初始化 
    
    数组的数组名 
    
    4和5是等价的
    p不能改变, *p不能改变 
    注意:必须初始化

6. 指针数组和数组指针

    指针数组:
    int *a[5];
    定义一个数组,数组有5个元素,每个元素8个字节,共40个字节,每个元素都是指向
    整形变量的指针
    
    char *pstr[5];

    存储字符串数组使用二维数组
    操作字符串数组使用指针数组 

http://www.lryc.cn/news/336341.html

相关文章:

  • JSP内置对象session
  • BM96 主持人调度(二)(贪心算法)
  • 【TB作品】MSP430单片机读取大气压强传感器BMP180
  • Github第一Star数的国产免费开源防火墙--雷池社区版初步体验
  • 自动驾驶涉及相关的技术
  • 简单高效的GO发票识别+发票查验接口
  • c++和python基本数据类型比较
  • 运维工具如此割裂,九招帮你统一纳管
  • 基于springboot的大创管理系统源码数据库
  • 解密辛普森悖论:如何在数据分析中保持清醒头脑
  • Vue前端框架
  • 【随笔】Git 基础篇 -- 远程仓库 git clone(二十五)
  • 在js中如果a的值是空是不是if(表达式的值是false)?
  • 数据生成 | Matlab实现基于K-means和SVM的GMM高斯混合分布的数据生成
  • HarmonyOS开发:【NFC配置流程】
  • 解决JQuery和其他库的冲突
  • 【Linux】在 Linux 上模拟网络故障
  • 腾讯云流量怎么计算的?轻量服务器流量价格表
  • 解决Maven Clean过程因内存溢出导致的“Process terminated”问题
  • 十分钟掌握在 PyTorch 中构建一个深度神经网络,基本组件、步骤和代码实现,从导入模块和定义网络结构到训练和评估网络性能。
  • BUG:vue表单验证校验不报错,必填都有信息,就是不能正常往下进行
  • MapStruct入门教程详解:轻松掌握Java Bean映射
  • Springboot 集成websocket
  • FPGA和ARM学习那个比较好
  • 你知道 Java 线程池的原理吗?
  • numpy学习笔记(1),不定期更新
  • 如何使用静态IP代理解决Facebook多账号注册并进行网络推广业务?
  • 局部适配器在产品和二次开发中的应用
  • C++之类和对象(上)
  • Linux 测试磁盘读写速度