码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 快速理解C语言——指针


    1、地址和内存

    把值存在内存中,内存就给每一个值分配一个地址:

    100 104 108 112 116就是每个值分别对应的地址;

    给每个内存地址起个别名,就是:变量

    2、值和类型

    如下,是我们声明的变量:

    1. int a = 112;
    2. int b = -1;
    3. float c = 3.14;
    4. int *d = &a;
    5. int *e = &c;

    值的类型并不取决于它本身,而是取决于它被使用的方式,当 c = 1078523331,被使用成整型时,它就是整型,被使用成浮点型时,就是浮点型。

    3、指针变量的内容

    d =  a 变量=内存地址;        e = c变量=内存地址;

    *d = a地址中存的数:112; e = c地址中存的数:3.14

     

     4、指针的初始化

    (1)错误的初始化:

     给*p这个变量的地址中重新写入了1这个值,会导致意想不到的危险结果。

    1. int *p; 
    2. *p = 1;

    (2)正确的初始化:

    1. int* p;
    2. int i;
    3. p = &i;
    4. *p = 13;

    指针变量声明后,必须先让它指向一个分配好的地址,再进行读写,这叫做指针变量的初始化。

    (3)为了防止错误的指针初始化,可以如下:

    int* p = NULL;

    5、指针的移动

    1. short* j;
    2. j = (short*)0x1234;
    3. j = j + 1; // 0x1236

             j     的地址是   0x1234;

            j+1  的地址是   0x1236,

            因为一个单位的short类型占据两个字节的宽度,所以相当于向高位移动两个字节。

    6、指针与指针的减法

           相同类型的指针允许进行减法运算,返回它们之间的距离,即相隔多少个数据单位。

    1. short* j1;
    2. short* j2;
    3. j1 = (short*)0x1234;
    4. j2 = (short*)0x1236;
    5. ptrdiff_t dist = j2 - j1;
    6. printf("%d\n", dist); // 1

     j1和j2是两个指向 short 类型的指针,变量dist是它们之间的距离,类型为ptrdiff_t,值为1,因为相差2个字节正好存放一个 short 类型的值。

    7、指针的加法运算(非法,不可取)

    指针只能与整数值进行加减运算,两个指针进行加法是非法的

    1. unsigned short* j;
    2. unsigned short* k;
    3. x = j + k; // 非法
  • 相关阅读:
    Taurus .Net Core 微服务开源框架:Admin 插件【4-3】 - 配置管理-Mvc【Plugin-MicroService 微服务】
    HTML网页设计制作大作业 基于HTML+CSS+JavaScript实现炫丽口红网化妆品网站(10页)
    ubuntu基本操作
    python基础知识视频
    创品牌强农精品培育消费引领 国稻种芯百团计划行动发布
    【正点原子STM32连载】 第六十二章 UCOSII实验2-信号量和邮箱 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
    10个免费PPT下载资源网站分享
    python docx 获取图片 包括获取压缩包中的图片 与 整页转换成图片方案
    Oracle数据库开发-外部表应用
    webpack:使用externals配置来排除打包后的某个依赖&插件IgnorePlugin的使用
  • 原文地址:https://blog.csdn.net/lurong66/article/details/127039401
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号