You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用指针实现分钟转小时与分钟?代码指针与引用混淆疑问

用指针实现分钟转小时/分钟的程序:理清引用与指针的区别

Hey there! 我完全理解你对引用和指针的困惑——它们乍一看很相似,但底层逻辑差得挺多的。咱们来修正你的作业代码,同时把两者的区别讲清楚,帮你彻底掌握这个概念。

先搞懂引用和指针的核心差异

你朋友说你用了引用而非指针,咱们先明确两者的关键区别:

  • 引用:本质是现有变量的"别名",一旦绑定到某个变量后就不能再指向其他变量,而且永远不能为"空"。使用引用时,你是直接操作原变量本身。
  • 指针:是独立的变量,存储的是另一个变量的内存地址。你可以重新赋值让它指向不同的变量,它可以为空,而且必须用*操作符来访问它所指向地址里的值。

符合要求的指针版实现代码

先上代码,再逐部分解释:

#include <iostream>

void convert_minutes(int total_minutes, int* hours_ptr, int* remaining_mins_ptr) {
    // 用*操作符解引用指针,修改它指向的原变量的值
    *hours_ptr = total_minutes / 60;
    *remaining_mins_ptr = total_minutes % 60;
}

int main() {
    int user_input;
    int calculated_hours, calculated_mins;

    std::cout << "请输入总分钟数: ";
    std::cin >> user_input;

    // 用&操作符获取变量的内存地址,传给指针参数
    convert_minutes(user_input, &calculated_hours, &calculated_mins);

    std::cout << user_input << "分钟 = " << calculated_hours << "小时" << calculated_mins << "分钟\n";

    return 0;
}

指针相关的关键细节拆解:

  1. 函数参数:int* hours_ptr和int* remaining_mins_ptr是指针类型,它们用来存储整数变量的内存地址。
  2. 函数内的解引用:*hours_ptr的意思是"访问hours_ptr指向的地址里存储的值",所以当我们给*hours_ptr赋值时,实际上是修改了main函数里的calculated_hours变量。
  3. 传参时的地址传递:在main里,&calculated_hours用来获取calculated_hours变量的内存地址,把这个地址传给函数的指针参数,指针才能指向这个变量。

对比你可能写的引用版代码

为了更清晰,这里贴出引用版的实现——你会发现它不需要处理地址和解引用:

void convert_minutes(int total_minutes, int& hours_ref, int& remaining_mins_ref) {
    hours_ref = total_minutes / 60;
    remaining_mins_ref = total_minutes % 60;
}

// 在main里直接传变量即可:
convert_minutes(user_input, calculated_hours, calculated_mins);

这个写法能实现功能,但不符合教授要求的指针用法,所以还是得用第一种指针版的代码。

希望这些解释能帮你理清思路!等你熟练掌握了解引用和地址传递的逻辑,指针就不再难啦。

内容的提问来源于stack exchange,提问作者user9080342

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:59:40