C语言中的自动变量和阴影内存、作用域

C语言中的自动变量和阴影内存、作用域,c,pointers,struct,scope,memory-address,C,Pointers,Struct,Scope,Memory Address,我有一段代码,可以做这么简单的事情 static Log_t* point2logEntry = NULL; void function1(void) { .... point2logEntry->Member1 = 1; point2logEntry->Member2 = Member1 + 1; //Member2 will be equal to 2 point2logEntry->Member3 = Member1 + 2; //Member2 will be equ

我有一段代码,可以做这么简单的事情

static Log_t* point2logEntry = NULL;

void function1(void)
{
....
point2logEntry->Member1 = 1;
point2logEntry->Member2 = Member1 + 1; //Member2 will be equal to 2
point2logEntry->Member3 = Member1 + 2; //Member2 will be equal to 3
...
}
现在
points2logEntry
有一些数据的地址

void Function2(void)
{
Log_t* points2Log;
function1();
points2log->Member1 = 4;
points2log->Member2 = 5;
points2log->Member3 = 6;

point2logEntry = points2log;
/* At this point, the compiler/debugger window shows the memory address of the 2 pointers are one and the same. Shadowed and the watch window shows. 
 point2logEntry->Member1  //Member2 will be equal to 4
 point2logEntry->Member2  //Member2 will be equal to 5
 point2logEntry->Member3  //Member2 will be equal to 6
*/    
}
现在
point2logEntry=points2log这是在
Function2
中设置的,并且
Function2
调用
Function1

在下面的
功能3

void Function3(void)
{
...
Function2(); //see Question1 below

}
我在“监视”窗口中看到的是
点的地址2log
被镜像/隐藏到
point2logEntry

问题1)因为
function2
中的
points2log
是一个自动变量,但其地址被隐藏到一个静态范围的指针
point2logy
。执行
function2
后,
point2logEntry
的成员是否仍包含最新数据

问题2)您什么时候以及为什么要这样做(镜像内存地址)?这样做有什么好处吗?还是程序员的偏好


我的理解是:您基本上可以使用
points2logEntry
来满足所有
函数2
需求(因为静态生命周期),但在这种情况下程序员会以这种方式使用。事实上,当
function2
从堆栈中“弹出”时,自动变量
Log\u t*points2Log消失,数据不再可用。但是地址被传递到
point2logEntry
,在
function2
的作用域过期后,地址将永远丢失。

实际问题是什么?如果您先调用function1,point2logEntry将为空。如果调用函数2,则点2日志未定义。你们的问题是什么?C并不是很高的级别,你们有垃圾收集器为你们清理垃圾。你必须自己做。这实际上取决于
中的内容。请发布真实代码提示:
points2Log
的生命周期是多少?