我不断收到此错误消息:
The variable 'pminutes' is being used without being initialized.
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void ConvertMinutesToHM(int time_minutes, int *phours, int *pminutes);
void main ()
{
int min, *phours, *pminutes;
printf("Enter a number of minutes:\n");
scanf("%d", &min);
ConvertMinutesToHM(min, phours, pminutes);
printf("Hours=%d", phours);
printf("Minutes=%d", pminutes);
}
void ConvertMinutesToHM (int time_minutes, int *phours, int *pminutes)
{
int hours, minutes;
*phours = time_minutes / 60;
*pminutes = time_minutes % 60 * 60;
}
最佳答案
在 c 编程语言中,非全局变量、静态变量或由程序员显式初始化的变量根本不会被初始化,读取它们会导致未定义的行为。
您正在将它传递给一个将取消引用指针的函数,并且由于它未初始化,该函数将从内存中的未确定位置读取,因为指针所持有的值未在任何地方定义。这并不意味着指针没有保存值,它意味着该值是一个随机垃圾值,不能用作地址,但如果您不小心并取消引用它,它就会成为地址。
您可以通过使其指向将在堆栈上分配的实际变量并使其指向有效内存来初始化它,就像这样
int minutes;
int *pminutes = &minutes;
当然,您可以简单地直接传递&minutes
,但是这样,pminutes
指针将保存堆栈变量minutes
的地址已正确分配,但未初始化。
minutes
变量不需要初始化,因为它旨在用作存储函数将读取的值并将其存储到 pminutes
指向的任何内容中。
问题是 pminutes
是一个指针,当程序试图读取它持有的地址时,不初始化它会导致未定义的行为。
显式初始化大多数变量仍然是很好的做法,但我也认为当您确定它们将在某处初始化并且添加显式初始化没有意义时,最好不要这样做,从而使代码更难理解.
关于c - 变量 'pminutes' 未初始化就被使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41648225/