• C++中指针的概念和声明


    C++中指针的概念和声明

    学习 C++ 的指针既简单又有趣。通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C++ 程序员,学习指针是很有必要的。

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。

    指针是存储内存地址的变量。就像 int 变量用于存储整数值一样,指针变量用于存储内存地址,如:

    在这里插入图片描述

    因此,指针是一个变量,与所有变量一样,指针也占用内存空间(在图 8.1 中,其地址为 0x101)。指针的特殊之处在于,指针包含的值(这里为 0x558)被解读为内存地址,因此指针是一种指向内存单元的特殊变量。

    注意:

    内存单元地址通常使用十六进制表示法。十六进制是一种位权为 16 的幂的数字表示法,即使用 16 个不同的符号( 0-9 和 A-F)来表示数字。显示十六进制数时,通常使用前缀 0x。因此, 0xA 是十进制数 10 的十六进制表示, 0xF 是十进制数 15 的十六进制表示,而 0x10 是十进制数 16 的十六进制表示。
    
    • 1

    作为一种变量,指针也需要声明。通常将指针声明为指向特定的类型,如 int,这意味着指针包含的地址对应的内存单元存储了一个整数。 也可将指针声明为指向一个内存块, 这种指针被称为 void 指针。
    作为一种变量,指针与所有变量一样,也需要声明:

    PointedType * PointerVariableName;
    
    • 1

    在这里,PointedType 是指针的基类型,它必须是一个有效的 C++ 数据类型,PointerVariableName 是指针变量的名称。用来声明指针的星号 * 与乘法中使用的星号是相同的。但是,在这个语句中,星号是用来指定一个变量是指针。以下是有效的指针声明:

    int    *ip;    /* 一个整型的指针 */
    double *dp;    /* 一个 double 型的指针 */
    float  *fp;    /* 一个浮点型的指针 */
    char   *ch;    /* 一个字符型的指针 */
    
    • 1
    • 2
    • 3
    • 4

    所有指针的值的实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。

    与大多数变量一样,除非对指针进行初始化,否则它包含的值将是随机的。您不希望访问随机的内存地址,因此将指针初始化为 NULL。 NULL 是一个可以检查的值,且不会是内存地址:

    PointedType * PointerVariableName = NULL; // initializing value
    
    • 1

    因此,声明 int 指针的代码如下:

    int *pointsToInt = NULL;
    
    • 1

    注意:

    与您学过的所有数据类型一样,除非对指针进行初始化,否则它包含的将是垃圾值。对指针来说,这种垃圾值非常危险,因为指针包含的值被视为地址。未初始化的指针可能导致程序访问非法内存单元,进而导致程序崩溃。
    
    • 1

    该文章会更新,欢迎大家批评指正。

    推荐一个零声学院的C++服务器开发课程,个人觉得老师讲得不错,
    分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
    fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
    TCP/IP,协程,DPDK等技术内容
    点击立即学习:C/C++后台高级服务器课程

  • 相关阅读:
    .NET WebAPI 自定义 NullableConverter 解决可为空类型字段入参“”空字符触发转换异常问题
    HashMap在JDK1.7和JDK1.8中有哪些不同?HashMap的底层实现
    java和js实现MD5加密
    【基于Tansformer的融合方法:感知损失:传递-感知损失】
    Mysql 索引与事务
    蓝桥杯算法竞赛第一周题型总结
    为什么说实验室信息管理系统LIMS是势在必行,有哪些必要性
    小程序获取用户手机号码
    windows 系统下 设置 redis开机自启动
    Spring依赖注入源码分析
  • 原文地址:https://blog.csdn.net/qq_41317716/article/details/133370079