自动变量和阴影内存,范围,C语言

时间:2017-06-15 06:24:41

标签: 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 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

Function3下方

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

}

我在观看窗口中看到的是points2log的地址被镜像/隐藏到point2logEntry

问题1)由于points2log中的function2是一个自动变量,但其地址被隐藏为静态范围指针point2logEntry。执行function2后,point2logEntry的成员是否仍会拥有最新数据?

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

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

0 个答案:

没有答案