如何用指针实现分钟转小时与分钟?代码指针与引用混淆疑问
用指针实现分钟转小时/分钟的程序:理清引用与指针的区别
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; }
指针相关的关键细节拆解:
- 函数参数:
int* hours_ptr和int* remaining_mins_ptr是指针类型,它们用来存储整数变量的内存地址。 - 函数内的解引用:
*hours_ptr的意思是"访问hours_ptr指向的地址里存储的值",所以当我们给*hours_ptr赋值时,实际上是修改了main函数里的calculated_hours变量。 - 传参时的地址传递:在
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
相关产品推荐
相关产品推荐

