我有如下代码。它显示当前日期和100天后的日期。然而,我注意到结果是一样的。所以我想也许结构或变量的地址是一样的。
我把变量"%p"
、now
、later
和lnow
的tnow
放在最下面的结果表明,lnow
和tnow
的结构指针都是02B51AA0
,而变量later
和now
的地址不同。
现在,如果我在第一个switch语句之后将lnow = localtime(&later)
移动到不同的位置,那么地址会发生变化,并且工作得很好。你能解释一下为什么会这样吗?
#include <stdio.h>
#include <time.h>
struct tm* tnow;
struct tm* lnow;
int main(void)
{
time_t now = time(NULL);
time_t later = now + 100*24*3600;
printf("%p\t%p\n", &now, &later);
lnow = localtime(&later);
tnow = localtime(&now);
printf("%p\t%p\n", lnow, tnow);
printf("%d.%d.%d\t", tnow->tm_year+1900, tnow->tm_mon+1, tnow->tm_mday);
switch (tnow->tm_wday)
{
case 0: puts("SUNDAY"); break;
case 1: puts ("MONDAY"); break;
case 2: puts("TUESDAY"); break;
default: puts("ELSE"); break;
}
printf("%d.%d.%d\t", lnow->tm_year+1900, lnow->tm_mon+1, lnow->tm_mday);
switch (lnow->tm_wday)
{
case 0: puts("SUNDAY"); break;
case 1: puts ("MONDAY"); break;
case 2: puts("TUESDAY"); break;
default: puts("ELSE"); break;
}
return 0;
}
结果
0061FF2C 0061FF28
02B51AA0 02B51AA0
2017.12.8 ELSE
2017.12.8 ELSE
最佳答案
为什么要打印now
和later
的地址?这些只是time_t
值,所以地址是无用的。localtime
返回一个指向内部缓冲区的指针-每次都是相同的,因此如果您想第二次执行localtime
操作,则需要从中复制值。
关于c - 内存分配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47708099/