MST

星途 面试题库

面试题:C++ 中引用和指针在内存分配上的基础差异

请简述 C++ 中引用和指针在内存分配方式上有哪些主要区别,并举例说明。
33.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 内存分配方式区别
    • 指针:指针本身是一个变量,存储的是另一个变量的地址。它在声明时会在栈上分配内存空间(如果是局部指针变量),用于存放所指向变量的地址。例如:
int num = 10;
int* ptr = #

这里ptr是指针变量,它在栈上有自己的内存空间,存放的是num的地址。指针可以被重新赋值指向不同的变量,因为它只是保存地址,通过改变保存的地址值就能改变指向。

  • 引用:引用是已存在变量的别名,它在声明时必须初始化,并且一旦初始化后就不能再引用其他变量。引用本身不占据额外的内存空间来存储地址,它和被引用的变量共享同一块内存。例如:
int num = 10;
int& ref = num;

这里refnum的引用,ref不是一个独立的变量,没有额外的内存用于存储地址,它和num在内存中代表同一块区域。

  1. 举例说明
#include <iostream>

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

    // 指针示例
    int* ptr = &num1;
    std::cout << "指针ptr指向的地址: " << ptr << ", 指向的值: " << *ptr << std::endl;
    ptr = &num2;
    std::cout << "指针ptr重新指向后地址: " << ptr << ", 指向的值: " << *ptr << std::endl;

    // 引用示例
    int& ref = num1;
    std::cout << "引用ref的值: " << ref << std::endl;
    // ref = num2; 这行代码是错误的,引用一旦初始化不能再改变引用对象
    return 0;
}

在上述代码中,指针ptr可以重新指向不同的变量,而引用ref一旦绑定到num1,就不能再绑定到其他变量,体现了它们在内存使用和特性上的差异。