MST

星途 面试题库

面试题:C++ 中引用和指针自增运算的基础差异分析

在C++中,定义一个整型变量 `int num = 5;`,然后分别定义指向该变量的指针 `int* ptr = #` 和该变量的引用 `int& ref = num;`。对指针和引用分别进行自增运算,即 `ptr++;` 和 `ref++;`。请分析这两种自增运算的结果有何不同,并解释原因。
29.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 指针自增运算(ptr++
    • 结果ptr 指向的地址增加了 sizeof(int) 字节。假设 int 类型在当前系统下占4字节,如果 num 的初始地址为 0x1000,那么执行 ptr++ 后,ptr 指向的地址变为 0x1004。它并没有改变 num 变量的值,num 仍然为 5
    • 原因:指针是一个变量,它存储的是另一个变量的地址。指针的自增运算,是按照指针所指向的数据类型的大小,增加指针所存储的地址值。对于 int* 类型的指针,自增运算会使指针指向下一个 int 类型数据的存储位置。
  2. 引用自增运算(ref++
    • 结果num 的值增加了1,变为 6。因为引用 refnum 的别名,对 ref 的操作等同于对 num 的操作。
    • 原因:引用本质上是给已存在变量起的一个别名,它和被引用的变量共享同一块内存空间。所以当对引用进行自增运算时,实际上是对引用所绑定的变量进行自增运算。