• C++中指针和引用、数组之间的区别


    指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名,引用初始化后不能改变指向。使用时,引用更加安全,指针更加灵活。

    1. 初始化。引用必须初始化,且初始化之后不能呢改变;指针可以不必初始化,且指针可以改变所指的对象
    2. 空值。指针可以指向空值,不存在指向空值的引用。当引用或者指针作为参数传递的时候,拿到一个引用的时候,是不需要判断引用是否为空的,而拿到一个指针的时候,我们则需要判断它是否为空。这点经常在判断函数参数是否有效的时候使用。
    3. 引用和指针指向一个对象时,引用的创建和销毁不会调用类的拷贝构造函数和析构函数。delete一个指针会调用该对象的析构函数,注意防止二次析构。
    4. 引用和指针与const。存在常量指针和常量引用指针,表示指向的对象是常量,不能通过指针或者常量修改常量;存在指针常量,不存在引用常量,因为引用本身不能修改指向的特性和与指针常量的特性相同,不需要引用常量。
    5. 函数参数传递时使用指针或者引用的效果是相同的,都是简洁操作主调函数中的相关变量,当时引用会更加的安全,因为指针一些修改指向,将不能影响主调函数中的相关变量。所以参数传递时尽可能使用引用。
    6. sizeof引用的时候是对象的大小,sizeof指针是指针本身的大小
    7. 引用和指针的实现是相同的,“引用只是一个别名,不会占内存空间”的说法是错误的,实际上引用也会再用内存空间。

    指针和数组之间的区别

    1. 数组要么在静态存储区被创建(全局数组),要么在栈上被创建。指针可以指向任意类型的内存块。
    2. sizeof可以计算数组的容量,sizeof(p)得到的是一个指针变量的字节数,而不是p所指向的内存容量。C++/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。
    3. 注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
    4. 注意下面的错误
    char a[] = “hello”;
    a[0] = ‘X’;
    cout << a << endl;
    char *p = “world”; // 注意p指向常量字符串
    p[0] = ‘X’; // 编译器不能发现该错误
    cout << p << endl;
  • 相关阅读:
    layui日历控件设置选择日期不能超过当前日期
    layui表格工具条,如何动态控制按钮的展示?
    celery定时任务
    redis的安装(windows+linux)
    redis常用操作
    mac通过virtualbox安装win10
    制作U盘启动盘
    k8s报错: * spec.template.spec.volumes[0].name: Invalid value: "nfs_pvc001": must match the regex [a-z0-9]([-a-z0-9]*[a-z0-9])? (e.g. 'my-name' or '123-abc')
    k8s的容器的端口暴露
    k8s中pod文件的定义格式
  • 原文地址:https://www.cnblogs.com/wxquare/p/4826371.html
Copyright © 2020-2023  润新知