码农知识堂 - 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; // 非法
  • 相关阅读:
    Windows系统关机后自动重启的解决方法
    代码随想录训练营补充|图论|Golang
    11月26日:操作系统实验杂记 msgget(创建消息队列) msgsnd(发送消息) msggrcv(接收消息) msgctl(控制消息队列)
    C Primer Plus(6) 中文版 第10章 数组和指针 10.6 保护数组中的数据
    在centos7系统中如何给docker配置代理
    猿创征文 |【C++】C++中的引用
    C++数据结构AVL树
    【C语言】文件的操作与文件函数的使用(详细讲解)
    黄仁勋:英伟达预言 2 年内行业将面目全非 一个词形容AI:Unbelievable
    Mysql(增删改查指令)
  • 原文地址: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号