MST

星途 面试题库

面试题:C++中引用和指针指向变化的差异分析

请简述C++中引用和指针在指向发生变化时的不同表现,并编写一段代码示例分别展示引用和指针指向变化(如果引用可以有类似表现的话),同时分析代码运行结果。
43.2万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 引用和指针在指向发生变化时的不同表现
    • 引用:引用在初始化后,无法再改变其引用的对象,它始终绑定到初始化时的那个对象。这是因为引用本质上是对象的别名,一旦别名确定,就不能再指向其他对象。
    • 指针:指针可以在其生命周期内指向不同的对象。指针存储的是对象的地址,通过修改存储的地址值,指针可以指向不同的对象。
  2. 代码示例
#include <iostream>

int main() {
    int num1 = 10;
    int num2 = 20;

    // 引用示例
    int& ref = num1;
    // ref = num2; // 这行代码是错误的,不能改变引用绑定的对象
    std::cout << "引用ref的值: " << ref << std::endl;

    // 指针示例
    int* ptr = &num1;
    std::cout << "指针ptr最初指向的值: " << *ptr << std::endl;
    ptr = &num2;
    std::cout << "指针ptr改变指向后的值: " << *ptr << std::endl;

    return 0;
}
  1. 代码运行结果分析
    • 对于引用部分,int& ref = num1; 创建了 num1 的引用 ref,之后如果尝试像 ref = num2; 这样改变引用绑定的对象,编译器会报错。std::cout << "引用ref的值: " << ref << std::endl; 输出的是 num1 的值,即 10
    • 对于指针部分,int* ptr = &num1; 使指针 ptr 指向 num1std::cout << "指针ptr最初指向的值: " << *ptr << std::endl; 输出 num1 的值 10。然后 ptr = &num2; 改变了指针 ptr 的指向,使其指向 num2std::cout << "指针ptr改变指向后的值: " << *ptr << std::endl; 输出 num2 的值 20